我的图像中包含一些功能/区域(上例中的球)。我想根据其属性为每个球着色不同的颜色。例如,可能是它的直径(以像素为单位)。
虽然我已经完成了功能识别方面的工作,但在显示结果时我却陷入了困境。现在我正在做:
my_image = imread(...);
//ball recognition and other stuff
for i = 1:number_of_balls
ball_diameter(i) = ... //I calculate the diameter of the i-th ball
ball_indices = ... //I get the linear indices of the i-th ball
//ball coloring
my_image(ball_indices) = 255; //color the red channel
my_image(ball_indices + R*C) = 0; //color the blue channel
my_image(ball_indices + 2*R*C) = 0; //color the green channel
end
figure
imshow(my_image)
colormap jet(100) //I want 100 different classes
colorbar
caxis([0, 50]) //I assume all balls have a diameter < 50
在上面的代码中,我将所有球染成红色,这绝对不是我想要的。问题在于,即使我知道ball_diameter(i)
,我也不知道该球会进入哪个colormap
类。换句话说,我需要类似的东西:
for i = 1:number_of_balls
// ...
if ball_diameter *belongs to class k*
my_image(ball_indices) = jet(k, 1);
my_image(ball_indices + R*C) = jet(k,2);
my_image(ball_indices + 2*R*C) = jet(k,3);
end
end
如何,而且大多数情况下,还有其他更合乎逻辑的方法吗?
答案 0 :(得分:0)
一种简单的方法如下:
制作与原始尺寸相同的2D图像。
设置每个&#34;球的指数&#34;直径或其他相关值
显示imagesc
使用caxis
,colormap
,colorbar
等动态调整类别。
例如,
a = randi(200,200); % 200 x 200 image containing values 1 to 200 at random
imagesc(a)
colorbar
上面应该显示一个带有默认色图的随机颜色字段。颜色条从1到200。
colormap(jet(5))
颜色条仍然从1到200,但只有5种颜色。
caxis([1 100])
颜色条现在显示从1到100缩放的五种颜色(顶部罐中的所有颜色都超过100)。
如果您想将具有不同直径的2D图像转换为指示直径范围的一组离散标签,一种简单的方法是使用histc
,第二个输出bin
的大小与输入图像,设置直径值落入哪个bin。在这种情况下,第二个输入是箱的边,而不是中心。
[n bin] = histc(a,0:20:201);
答案 1 :(得分:0)
您可以将像素的分配与其着色的类别分开显示:您可以使用my_image
作为2D R
- by - C
标记矩阵:即每个对象( ball)从1到100分配了不同的索引(如果图像中有100个对象)。现在,当您想要显示结果时,您可以要求图形使用colormap
将索引映射到颜色,或使用ind2rgb
显式创建彩色图像。
例如
%// create the index/labeling matrix
my_image = zeros( R, C );
for ii = 1:number_of_balls
my_image( ball_indices ) = ii; %// assign index to pixels and not atual colors
end
%// color using figure
figure;
imagesc( my_image );axis image;
colormap rand(100,3); %// map indexes to colors using random mapping
%//explicitly create a color image using ind2rgb
my_color_image = ind2rgb( my_image, rand(100,3) );
figure;
imshow( my_color_image ); % display the color image
注意:
1.恕我直言,最好使用随机颜色映射来显示像素的分类,而不是jet
,通常最终会得到与相邻对象非常相似的颜色,这使得在视觉上很难理解结果。登记/>
2.恕我直言,使用标签矩阵更方便,您也可以将其保存为文件作为索引图像(png格式),从而可以简单有效地显示,保存和加载结果。