1 YCbCr颜色空间 YCbCr颜色空间是YUV颜色空间的缩放和偏移版本。Y定义为8bit,标称颜色范围为16-235;Cb和Cr标称颜色表示范围为16-240。 YCbCr的采样格式一般有4:4:4、4:2:2、4:1:1、和4:2:0。 1.1 4:4:4 YCbCr格式 图1表示4:4:4格式YCbCr采样点的定位。 图1 4:4:4采样 1.2 4:2:2 YCbCr格式 图 2表示4:2:2格式YCbCr采样点定位。对于每两个水平Y采样点,有一个Cb和一个Cr采样点。 ? 图2 4:2:2协调位置采样 2 matlab YCbCr444转YCbCr422 首先将rgb图像转为YCbCr444然后再由YCbCr444转为YCbCr422。 zeros(H,W)); Cb1 =double(zeros(H,W/2)); Cr1 = double(zeros(H,W/2)); CbCr = double(zeros(H,W)); %RGB转YCbCr444
YCbCr的采样格式一般有4:4:4、4:2:2、4:1:1、和4:2:0。 1.1 4:4:4 YCbCr格式 图1表示4:4:4格式YCbCr采样点的定位。 图2 4:2:2协调位置采样 2 matlab YCbCr422转YCbCr444 在上一期的基础上将YCbCr422再转回YCbCr444 close allclear allclcI=imread( (:,:,1)=Y0;YCbCr(:,:,2)=Cb;YCbCr(:,:,3)=Cr;YCbCr=uint8(YCbCr);Y=uint8(Y0);Cb=uint8(Cb);Cr=uint8(Cr);% ');figure(3),imshow(YCbCr),title('YCbCr'); ? fpga实现YCbCr422转YCbCr444,效果和matlab一致。 ----
这几天在做分量视频输入,涉及分量视频表示,接触到YPbPr和YCbCr的概念,发现不光自己的项目上,对这两个概念错乱,就是网上也充斥着大量错误的说法。 分量接口有两种名称YPbPr和YCbCr,这是两个完全不同的概念,YCbCr概念早于YPbPr。 因此几乎所有具备分量输出的DVD机的分量端子都是标识为YCbCr(YUV),一切似乎合情合理,然而就此埋下了日后概念混淆的祸根。 直到有一天逐行DVD出现了,厂家们对于如何标识逐行分量端子犯了难了,直到美国标准YPbPr的出现,很多厂家们就用YPbPr表示逐行,用YCbCr表示隔行。 YCbCr表示隔行分量端子,YPbPr表示逐行分量端子 2.
YUV主要的采样格式 主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr4:1:1和 YCbCr 4:4:4。 其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值), 每 2x2 个点保存一个 Cr和Cb 值, 图像在肉眼中的感觉不会起太大的变化。 亮度和色度元素被称为YUV(模拟信号)或YCbCr(数字信号)而不是RGB。 一旦被分开,色度分辨率会通过一个叫做“色度取样”的步骤被减半或更多。
YCbCr 其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。 YCbCr 则是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分, 其实是YUV经过缩放和偏移的翻版。 在YUV 家族中, YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。 YCbCr 有许多取样格式, 如4∶4∶4 , 4∶2∶2 , 4∶1∶1 和4∶2∶0。 YCbCr模型来源于yuv模型。YCbCr is a scaled and offset version of the YUV color space.
YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。 matlab 源码: clear all; close all; clc; img = imread('lena1.jpg');%图像读入 figure,imshow(img); %显示原图像 ycbcr = rgb2ycbcr(img); %rgb to ycbcr 函数 figure,imshow(ycbcr); gray = rgb2gray(img); %rgb to gray 函数 figure Ycbcr图 ? gray图
1.1 YCbCr颜色空间 YCbCr颜色空间是YUV颜色空间的缩放和偏移版本。Y定义为8bit,标称颜色范围为16-235;Cb和Cr标称颜色表示范围为16-240。 YCbCr的采样格式一般有4:4:4、4:2:2、4:1:1、和4:2:0。 4:4:4 YCbCr格式: 图1表示4:4:4格式YCbCr采样点的定位。 (:,:,1)=Y0; YCbCr(:,:,2)=Cb0; YCbCr(:,:,3)=Cr0; YCbCr=uint8(YCbCr); RGB=uint8(RGB); figure(1), imshow(YCbCr),title('YCbCr'); figure(2), imshow(RGB),title('RGB'); ? 转之前(YCbCr444) ?
RGB转YCbCr虽然很基础,但是很重要(YCbCr转RGB雷同),怎样做更快也是一门学位。 ,包括JPEG,MPEG,H.264/5, AVS等都采用YCbCr格式,我们通常广义的讲的YUV,严格的讲应该就是YCbCr。 YCbCr也有一定的区间范围,因此给出RGB与YCbCr的相互转换公式如下: 2)针对标准HDTV(高清晰度电视),采用ITU-R BT.709数据格式,其参数略有不同,这里给出RGB与YCbCr的相互转换公式如下 : 3)最后,针对full range或者pc range的的YCbCr格式,这里YCbCr均为0-255的取值,其RGB与YCbCr的转换公式,如下: 因此在具体转换前,务必搞清楚当前的制式, 与上面full range下的RGB转YCbCr公式,还是有一些略微的区别。 3.RGB转YCbCr硬件思维推导 约定,我们采用上一节中full range的YCbCr转RGB的公式进行推导。
《Image\005_OV5640_DDR3_YCbCr422_RGB888\DOC\图像时序规范》 在本章中,我们只研究针对 OV5640 的 YCbCr 解码算法的实现。 图5‑2 OV5640 输出的 YCbCr422 是阉割版的 BT.656 视频流信号 由于 YCbCr422 格式下,每行发送 640*4 个数据,与 RGB565 一样。 首先,第一步,前面得到的 YCbCr422 为 2:1 的分量,为了更直观的实现YCbCr转 RGB 的算法,我们首先将 YCbCr422 转换成 YCbCr444, 即通过 Cb、Cr 的分配,完整的将每个像素均赋予 YCbCr 的格式。 最后,全编译,下载测试, HDMI显示通过 YCbCr422→YCbCr444→RGB888的彩色图像。
1.1.1 RGB888 转 YCbCr 介绍 虽说 OV5640 可以通过寄存器的设置,直接输出 YCbCr444 格式的视频流,但为了研究图像处理,以及最基本的视频格式转换,有意执行一次 RGB888 转 YCbCr444 操作。 关于 YCbCr(YUV) 格式视频流的介绍,详见《Image\004_OV5640_DDR3_RGB888_YCbCr444\DOC\YCbCr(YUV)格式视频流》。 RGB 转 YCbCr,实际上只是色度空间的转换,前者为三原色色度空间,后者为亮度与色差, OV5640 相机的软件应用手册详细给出了 RGB 与 YCbCr 色度空间转换公式,其中 RGB 转 YCbCr 1.1.2 RGB888 转 YCbCr 的 HDL 实现 新建并保存 VIP_RGB888_YCbCr444.v 与 src/Video_Image_Processor,具体的算法的 HDL 实现过程如下
Zynq-7000 rgb2ycbcr IP的创建与使用 作者:OpenSLee 1 背景知识 IP(Intellectual Property)在嵌入式FPGA设计中,指的是某些设计好的模块,分为软件模块和硬件模块 2 rgb2ycbcr IP的建立 对于RGB转ycbcr的理论可参考《FPGA图像处理之rgbtogray算法的实现》。 1) 创建工程添加源文件 ? FPGA开源工作室rgb2ycbcr IP的介绍 ? 如上图所示,clk为像素时钟,i_rgb接口为rgb888格式输入。 我们分别引出了o_rgb(RGB888)、o_ycbcr和o_gray接口,完成了一个模块三种颜色空间的输出以便后期设计的使用。 2)添加rgb2ycbcr IP ? 其他模块的配置和使用在此不再赘述,需要源工程的可以联系FPGA开源工作室。
颜色空间系列代码下载链接:http://files.cnblogs.com/Imageshop/ImageInfo.rar (同文章同步更新) 在常用的几种颜色空间中,YCbCr颜色空间在学术论文中出现的频率是相当高的 其和RGB空间之间的相互转换公式在网上也有多种,我们这里取http://en.wikipedia.org/wiki/YCbCr 描述的JPG转换时使用的计算公式: JPEG conversion const float YCbCrYRF = 0.299F; // RGB转YCbCr的系数(浮点类型) const float YCbCrYGF = 0.587F YCbCr综合图: ? Y分量: ? Cb分量: ? Cr分量: ? 在皮肤识别方面,常用YCbCr空间的数据进行分析,从上面几个图中也可以看出 ,肤色在CbCr有着一定的集聚性,这个在日后的文章中再说。
YCbCr色彩空间 色彩模型vs色彩空间 要解开YCbCr色彩空间这个结,色彩模型(color model)和色彩空间(color space)的区别必须要理解。 所以说系数值代表了这个转换公式,也就代表了YCbCr与RGB的映射关系,而且这一映射关系其实来源于标准ITU-R BT.601的定义,进一步阅读请看YCbCr–Wikipedia。 YCbCr是YUV家族中在工业领域使用最广泛的一种标准,这也是为什么JPEG内部编码采用YCbCr的原因。 文章来源于http://qtstack.com/colorspace-ycbcr/ 研读上文,才理解了YCbCr。 '); Image_YCbCr = rgb2ycbcr(Image_RGB);%YCbCr変换 %得到图片的行数与列数 [row column dim] = size(Image_RGB); for
1 仿真 仿真通过vga驱动读入图片,首先经过rgb2ycbcr444算法再到ycbcr444转ycbcr422算法再到ycbcr422转ycbcr444算法最后ycbcr444再转会rgb真彩色图像, 3 视频演示 3.1 rgb2ycbcr444视频效果 原文阅读:YCbCr444转YCbCr422 3.2 ycbcr444转422视频效果 原文阅读:fpga实现YCbCr422转YCbCr444 3.3 ycbcr422转ycbcr444视频效果 4 matlab整体验证 close all clear all clc I=imread('1.bmp'); [H ,W ,D]=size(I) 1)=Y0; Iycbcr(:,:,2)=Cb0; Iycbcr(:,:,3)=Cr0; Iycbcr=uint8(Iycbcr); % imshow(Iycbcr); % Iycbcr=rgb2ycbcr (:,:,1)=Y0; YCbCr(:,:,2)=Cb; YCbCr(:,:,3)=Cr; YCbCr=uint8(YCbCr); for i = 1:H for j = 1:W
9 RGB → YCbCr 9.1 公式转换 ? = img_ycbcr / 255 cv.imwrite('F:/img_YCbCr.PNG', img_ycbcr) cv.imshow('original image', imutils.resize 10 YCbCr → RGB 10.1 公式转换 ? cv import imutils def ycbcr2rgb(ycbcr_image): """convert ycbcr into rgb""" if len(ycbcr_image.shape =3 or ycbcr_image.shape[2]!
Zynq-7000 人体肤色识别 1 背景知识 在肤色识别算法中,常用的颜色空间为Ycbcr,Y代表亮度,cb代表蓝色分量,cr代表红色分量。 由于肤色在YCbCr 空间受亮度信息的影响较小,本算法直接考虑 YCbCr 空间的 CbCr分量,映射为两维独立分布的 CbCr空间。 RGB 转 YCbCr 的公式为: Y = 0.257*R+0.564*G+0.098*B+16 Cb= -0.148*R-0.291*G+0.439*B+128 Cr = 0.439*R-0.368* Pin name function Pix_clk 像素时钟 I_rgb Rgb888输入 I_gray 灰度输入 I_ycbcr Ycbcr颜色空间输入 Skin_binary_image 二值图像输出 从总体模块图可以看到首先实现rgb颜色空间转ycbcr颜色空间,其次实现肤色识别。 2.3 实验结果 ? 实验原图1 ? 实验原图2 ? 实验结果图1 ?
基于FPGA的人脸位置定位的仿真实现 1 概述 在肤色识别算法中,常用的颜色空间为Ycbcr,Y代表亮度,cb代表蓝色分量,cr代表红色分量。 由于肤色在 YCbCr 空间受亮度信息的影响较小,本算法直接考虑 YCbCr 空间的 CbCr 分量,映射为两维独立分布的 CbCr 空间。 RGB 转 YCbCr 的公式为: Y =0.257*R+0.564*G+0.098*B+16 Cb=-0.148*R-0.291*G+0.439*B+128 Cr =0.439*R-0.368*G-0.071 i_rgb, input [23:0] i_gray, input [23:0] i_ycbcr [23:16]; assign cb_8b = i_ycbcr[15:8]; assign cr_8b = i_ycbcr[7:0]; always@(posedge pix_clk or negedge
2.1 颜色阈值化图像分割(颜色特征提取图像) 首先使用matlab软件找出目标颜色的ycbcr颜色空间下的Cb和Cr分量的阈值范围。 ? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Project Name :y.m % FPGA Open Source Studio % Description: rgb to ycbcr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all close all clc img = imread('test5.png'); ycbcr = rgb2ycbcr(img); y=ycbcr(:,:,1); cb=ycbcr(:,:,2); cr=ycbcr(:,:,3); 2.2 图像仿真系统的使用 第一步:使用img_txt.m将图像转化为
2 FPGA的车牌位置定位的实现 具体实现步骤: 1,HDMI图像输入; 2,RGB通道矫正; 3,rgb2ycbcr颜色空间转换; 4,ycbcr特征目标区域提取; 5,图像二值化 图3 主要IP 如图3所示,1号rgb2ycbcr IP主要完成rgb颜色空间到ycbcr颜色空间的转换。可输出三种(rgb,ycbcr,gray)图像。 2号ycbcr_threshold IP主要完成ycbcr颜色空间的阈值操作,输出三种(binary,rgb,gray)目标颜色。 YCbCr_Threshold 源码如下所示: ? ? 2.4 实验结果展示 ? 图4实验原图1 ? 图5实验原图2 ? 图6实验结果图1 ?
fname,fpath]=uigetfile('.png','choose image'); img_fullpath=[fpath,fname]; img=imread(img_fullpath); YCBCR = rgb2ycbcr(img); ii=imresize(YCBCR, [128 128]); s = strel('ball',2,2); f = imclose(ii,s); i1=rgb2gray fname,fpath]=uigetfile('.png','choose image'); img_fullpath=[fpath,fname]; img=imread(img_fullpath); YCBCR = rgb2ycbcr(img); ii=imresize(YCBCR, [128 128]); s = strel('ball',2,2); f = imclose(ii,s); i1=rgb2gray = rgb2ycbcr(img); ii=imresize(YCBCR, [128 128]); s = strel('ball',2,2); f = imclose(ii,s); i1=rgb2gray