Как я могу хранить информацию об изображении в 2d массиве в MATLAB? - PullRequest
0 голосов
/ 28 декабря 2011

Я пытаюсь разделить цветное изображение на 100 блоков одинакового размера в Matlab, а затем сохранить максимальную информацию о цвете, присутствующую в коробке, в 2d массиве 10 * 10.

Пример:

Если максимальный цвет в блоке равен

  • черный, тогда в нем должно храниться 0
  • белый, затем 1,
  • красный, затем 2,
  • ...

в соответствующей ячейке 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); 

1 Ответ

0 голосов
/ 31 января 2013

Если у вас есть конечное количество цветов в вашем изображении, вы можете преобразовать его из 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 параметры, чтобы помочь вам справиться с этим условием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...