-1
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); 
4

1 回答 1

4

您正在以完全相同的方式处理两个图像(ims和),我将(尝试)描述每行的作用。imt如果您自己查看文档/使用您的大脑/逐步执行代码并检查每一步的变量,您当然也可以自己找到它。

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

来自rgb2ycbcr 文档

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

因此nspace1包含图像中每个 RGB 输入的 YCbCr 值ims。第二行提取每个像素,即 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); 

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

于 2012-10-03T19:06:18.337 回答