2013-06-03 7 views
0

Я пытаюсь сделать некоторый анализ изображения над плитами большого изображения tif. Я уже выполнил обработку, требуемую в каждой из этих фрагментов, и на этом этапе мне нужно создать одну мозаику из этих тифов. Я где-то читал, что по этой причине я могу использовать функцию «cat». Поскольку я не занимаюсь программированием, я нашел это легко и попытался применить его. Плитки, которые у меня есть, составляют около 154 тифов, и я попробовал кошку из 4-х из них, и она работает, и теперь я должен расширять ее по всем файлам. Моя проблема теперь заключается в том, чтобы применить его по всем тифам. Коды для 4 из них был:Image mosaic-ing in Matlab

img1 = imread ('E:...\'a1.tif','tif'); 
img2 = imread ('E:...\'a2.tif','tif'); 
img3 = imread ('E:...\'a3.tif','tif'); 
img4 = imread ('E:...\'a4.tif','tif'); 

image1 = cat(2,img1,img3); 

image2 = cat(2,img2,img4); 

image3 = cat(1,image2,image1); 
imshow(image3) 

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

+0

Как были плитки генерируются? Есть ли у них сопроводительная документация? Я был бы очень удивлен, если нет какого-либо вспомогательного файла, описывающего, как они устроены, или какого-либо соглашения, которое позволяет вам определить это с учетом названий/номеров файлов. – wakjah

+0

изображения фактически имеют координаты, в которых имя каждого изображения находится в верхнем левом углу этого изображения. например, «32511616,4_5403956,2.tif». поэтому я бы сказал, что они представляют собой 11 рядов по направлению x и 14 рядов по направлению y. – user2355306

ответ

0

Если плитка одного и того же размера можно объединить их, работая на них, как если бы они были простые матрицы:

% dots-and-linebreak used for prettier formatting 
concatenated_image = [ img1, img3; ... 
         img2, img4 ]; 

Все плитки до ; соединяются горизонтально в одной строке, а строки объединяются вертикально форма окончательное изображение.

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

NUMBER_OF_IMAGES = 152; % divisible by 4 
IMAGES_PER_LINE = 4; 

concatenated_image = []; 
for ii = 0 : (NUMBER_OF_IMAGES/IMAGES_PER_LINE)-1 
    one_row = []; 
    for jj = 1 : IMAGES_PER_LINE 
     % concatenate next image in this line 
     one_row = [ one_row eval(['img' num2str(4*ii+jj)]) ]; 
    end 

    % add constructed row to the existing image 
    concatenated_image = [ concatenated_image; one_row ]; 
end 

Вместо того чтобы использовать переменные с именами, как imgN вы должны предпочитают использовать клеточные массивы Matlab «s. Затем вы можете загрузить все изображения с:

imgs = {}; 
for ii = 1:154 
    imgs{ii} = imread (['E:...\a' num2str(ii) '.tif'],'tif'); 
end 

Тогда вы должны изменить код выше конкатенацию:

... 
one_row = [ one_row imgs{4*ii+jj} ]; 
... 
+0

Благодарим вас за ответ. Ну, код выше не включает функцию cat. что отсутствует, или код действительно такой. Я также хотел бы спросить, что вы имеете в виду, что горизонтальные плитки разделены запятой, а вертикальные разделены полуколоном? – user2355306

+0

Код - это именно то, как я его написал. Он не нуждается в функции cat, потому что вы используете собственный подход Matlab для построения матриц. Да, вы разделяете плитки горизонтально с * запятыми * или * пробельными символами * и вертикально с * точкой с запятой *. – plesiv

+0

Уважаемый zplesivcak: Большое спасибо за вашу помощь и скрипт. это очень задумчиво, но у меня проблемы с его применением для моих файлов. ну, именование моих файлов основано на верхнем левом углу каждого изображения. например, это: ('32511616,4_5401556,2.tif', '32512016,4_5402756,2.tif', '32512016,4_5403156,2.tif', '32512416,4_5401156,2.tif'), где у нас есть 11 строк и 14 столбцов. не могли бы вы посоветовать мне, как я могу изменить сценарий, чтобы применить его для моих файлов? – user2355306