下面的代码是做什么的?样本图像转换为ycbcr

时间:2012-10-03 18:33:37

标签: matlab image-processing

nspace1=rgb2ycbcr(ims);
nspace2= rgb2ycbcr(imt);
ms=double(nspace1(:,:,1));
mt=double(nspace2(:,:,1));
m1=max(max(ms));
m2=min(min(ms));
m3=max(max(mt));
m4=min(min(mt));
d1=m1-m2;
d2=m3-m4;

% Normalization
dx1=ms;
dx2=mt;
dx1=(dx1*255)/(255-d1);
dx2=(dx2*255)/(255-d2);
[mx,my,mz]=size(dx2); 

1 个答案:

答案 0 :(得分:4)

您正在以完全相同的方式处理两个图像(imsimt),我会(尝试)描述每条线的作用。如果你自己查看文档/使用你的大脑/ execute the code step by step并在每一步检查变量,你当然也可以自己找到它。

nspace1=rgb2ycbcr(ims);
ms=double(nspace1(:,:,1));

来自rgb2ycbcr documentation

  

ycbcrmap = rgb2ycbcr(map)将地图中的RGB值转换为YCbCr颜色空间。 map必须是M-by-3数组。 ycbcrmap是一个M-by-3矩阵,它包含YCbCr亮度(Y)和色度(Cb和Cr)颜色值作为列。

因此nspace1包含图像ims中每个RGB输入的YCbCr值。 第二行,每个像素的提取,YCbCR三元组的第一个元素,就是你可以读到的亮度。

m1=max(max(ms));
m2=min(min(ms));

第一个max找到每列的最大值,因此它会留下一行。第二个max找到该结果行的最大值,这将为您提供整个矩阵的绝对最大值。 min(min(...))也是如此。

d1=m1-m2;

然后是亮度的数值范围。

dx1=ms;
dx1=(dx1*255)/(255-d1);

应该是评论所暗示的规范化,但肯定看起来不像规范化。我想这应该是:

dx1 = (ms-m2)*255/d1;

将每个亮度值转换为0到255之间的值。

[mx,my,mz]=size(dx2); 

我把最后一个留给你弄清楚,不应该那么难。