我试图在matlab中将彩色图像划分为100个相同大小的块,然后以10 * 10的2d数组存储盒子中存在的最大颜色信息。
示例:
如果块中存在的最大颜色是
在2d数组的相应单元格中。
我的图片中颜色数量有限。我在blockproc
上阅读了一篇文章,但我无法实现它。
我该怎么做?
编辑:(评论代码)
I=imread('Untitled.png');
I = I(1:290,1:288,:);
[m n o] = size(I);
r = m/240;
c = n/240;
fun = @(block_struct) max(block_struct.data(:));
J = blockproc(I,[r c],fun);
imshow(J);
答案 0 :(得分:0)
如果图像中的颜色数量有限,则可以通过调用indexed将其从3D RGB图像转换为rgb2ind
图像:
myColMap; % this is your color map:
% it should have black as its first entry,
% white in second, red in third etc.
indImg = rgb2ind( I, myColMap ); % convert RGB image to indexed one
要在每个补丁中找到最“流行”的颜色(请注意,这不是max
颜色,而是mode
)
fun = @(block_Struct) mode( block_struct.data(:) )
J = blockproc( indImg, [r c], fun );
请注意,修补程序大小[r c]
应为整数编号。因此,如果240
(如您的示例中)无法分割图像大小,则可能会导致问题。检查blockproc
参数以帮助您处理此情况。