Обработка изображения - PullRequest
       1

Обработка изображения

2 голосов
/ 10 апреля 2011

У меня есть этот набор изображений, как показано, я нашел центр тяжести каждого из них с помощью приведенного ниже кода, теперь я сохранил новые изображения в Im01, Im02, Im03, и все они являются матричными изображениями размером N на N.

Im1 = imread('image1.png');
[x,y] = ait_centroid(Im1);
Im01=circshift(Im1, [-1 -5]);
[x,y] = ait_centroid(Im01);
Im01=uint16(Im01);

Im2 = imread('image2.png');
[x,y] = ait_centroid(Im2);
Im02=circshift(Im2, [-2 -4]);
[x,y] = ait_centroid(Im02);
Im02=uint16(Im02);

Im3 = imread('image3.png');
[x,y] = ait_centroid(Im3);
Im03=circshift(Im3, [-3 -5]);
[x,y] = ait_centroid(Im03);
Im03=uint16(Im03);

Моя задача состоит в том, чтобы добавить эти изображения, используя итерацию, потому что у меня был большой набор изображений (не только 3 изображения), над которыми я работаю. Я смог добавить их вручную и показать среднее значение, выполнив это

G=imadd(Im01,Im02,'uint16');
G=imadd(G,Im03,'uint16');
imshow(uint8(G/3),[]);

и это сработало. Но когда я попытался выполнить итерацию с помощью doin this

G=imadd(Im01,Im02,'uint16');
for i=1:1:3
G=imadd(G,Im(i),'uint16');
end

Я получаю ошибку, я также устал определять изображения как матрицу матрицы с помощью

H = [ [Im01] [Im02] [Im03] ]
G=imadd(Im01,Im02,'uint16');
for i=1:1:3
G=imadd(G,H(i),'uint16');
end

ошибка указывает на H (i).

Код в Matlab

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

H = [ [Im01] [Im02] [Im03] ] не создает массив матриц в Matlab.Вместо этого он объединяет три изображения в один массив.Что вы хотите сделать, это создать массив ячеек , т.е. будет работать следующее:

%# curly brackets to construct cell array
H = {Im01, Im02, Im03 }; 
G=H{1}; %# initialize G
for i=2:1:3 %# start at img#2
   G=imadd(G,H{i},'uint16');
end

В качестве альтернативы, если все, что вы хотите сделать с изображениями, это добавить их, вы можетевыполните следующие действия:

%# in case you want to store the images
images = cell(numberOfImages,1);

%# loop over all images
for iImg = 1:numberOfImages
   tmp = imread(sprintf('image%i.png',iImg));
   [x,y] = ait_centroid(tmp);
   Im01=circshift(tmp, [x y]); %# I assume that's what you want?
   [x,y] = ait_centroid(Im01); %# not sure what you do this for
   if iImg ==1
      G = uint16(tmp);
   else
      G = imadd(G,uint16(tmp));
   end
   %# maybe you want to store your images
   images{iImg} = uint16(tmp);
end
0 голосов
/ 11 апреля 2011

Вы можете использовать sprintf и eval для перебора имен ваших изображений.

G=imadd(Im01,Im02,'uint16');
for i=1:1:3
   Im_name = sprinft('Im0%i',i);    
   G=imadd(G,eval(Im_name),'uint16');
end

Функция sprintf добавит число i за строкой 'Im0', поэтому сначала вы получите Im01, затем Im02 и т. Д. Функция eval необходима для интерпретации этих строк в переменные Matlab.

РЕДАКТИРОВАТЬ: Я думаю, что лучший способ избежать таких проблем, как сохранить ваши изображения в ячейке с самого начала.То есть, читая изображения, считывая их в одну ячейку

Im{1} = imread('Im01.xxx')
Im{2} = imread('Im02.xxx')
etc...

, вы можете легко перебирать различные изображения без использования строк.

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