示例图片:
我知道如何计算RGB图像的熵。首先,对图像进行矢量化,最后将其用作entropy()函数的参数。
image_vector = double(original_RGB_image(:));
entropy_of_the_image = entropy(image_vector);
但我们应该怎样做才能计算出图像感兴趣区域的熵?
我知道一种方法。以某种方式,将其转换为黑白图像(白色= 1)并使用黑白图像的反转作为原始RGB图像的参数。我认为,那么背景颜色将是黑色。但它不起作用。背景(环境)变成蓝色(类似的东西)而不是黑色?我该怎么办? 这是我的代码......
a=imread('ISIC_0000001 w.jpg');
a=imresize(a,[300 300]);
mkr=a;
figure,
imshow(mkr);
im=rgb2gray(a);
level=graythresh(im);
a=im2bw(im,level);
figure,
imshow(a);
mkr(a)=nan;
figure,
imshow(mkr);
答案 0 :(得分:0)
你走在正确的轨道上。
我认为,那么背景颜色将是黑色的。但它不起作用。背景(环境)变成蓝色(类似的东西)而不是黑色?我该怎么办?
首先检查图像矩阵中的实际数值。如果它们实际上是0或nan
那么您看到的蓝色很可能是颜色映射配置的结果(其中数字用作地图中颜色的参考)。
此处的另一个问题可能与您的图像中有三个通道(红色,绿色,蓝色)的不匹配以及您用作过滤层或逻辑索引矩阵的黑白图像只有一个通道有关。
假设您的黑白图像正常工作,那么您在图像中的相应感兴趣区域中获得1,并在其他位置获得0,并且您已将此变量命名为{{1} }。您可以使用逻辑索引计算图像的红色,绿色和蓝色通道的熵。然而,regionOfInterestImage
是NxM矩阵,而您的原始图像是NxMx3矩阵(R,G,B的x3)。
我们假设您已经计算了1和0的矩阵,其中1对应于您感兴趣的区域,并在其中称为regionOfInterestImage
码。
作为使用MATLAB提供的图像的示例:
regionOfInterestImage
现在为每个通道重复此感兴趣区域图层,以便可以使用它来访问原始图像中要计算熵的像素值。
rgbImg = imread('ngc6543a.jpg');
%create a filter layer based on primarily blue pixels:
regionOfInterest = rgbImg(:,:,2)>100 & rgbImg(:,:,1)<100 & rgbImg(:,:,3)<100;
我在这里使用entropy_of_the_image_region = entropy(rgbImg(repmat(regionOfInterest,1,1,3)));
在每个频道重复repmat
图层。然后使用得到的NxMx3矩阵索引到原始RGB图像(regionOfInterest
)并获得相应的通道值作为矢量,以便rgbImg
进行处理。