2014-09-23 3 views
3

У меня есть 8 изображений, и я хочу показать их в формате масштабного пространства, показанного ниже. Исходная высота и ширина изображения - 256. Затем на правой стороне исходного изображения на каждом уровне размер уменьшается на 2. Как здесь, высота и ширина изображения - 256. С правой стороны исходного изображения высота и ширина 128 , 64, 32, 16, 8, 4, 2.Показать масштаб изображения в MATLAB

У меня есть все изображения в соответствующих размерах. Я просто хочу знать, как упорядочить изображения в соответствии с рисунком, показанным ниже. Заранее спасибо.

enter image description here

ответ

4

Это выглядит, как вы пытаетесь построить масштабирование пространства и отображения результатов пользователю. Это не проблема. Имейте в виду, что вам придется делать это с помощью циклов for, так как я не вижу, как вы сможете это сделать, если не скопируете и не вставьте несколько строк кода. На самом деле, я собираюсь использовать цикл while, и я скажу вам, почему скоро.

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

Во-первых, напишите код, который помещает исходное изображение с левой стороны, и версию, которая вдвое меньше размера справа. Как только вы это сделаете, вы пишете цикл for, используйте индексирование, чтобы поместить изображения в правильные места, пока не закончите масштаб, и вам нужно отслеживать, где начинается следующее изображение и заканчивается следующее изображение. Имейте в виду, что происхождение того, где записывать следующие изображения после первого подвыборки, начинается с местоположения столбца исходного изображения, а строка справа, где заканчивается предыдущий. В качестве примера воспользуемся изображением cameraman.tif, которое равно 256 x 256, но я напишу код так, чтобы он соответствовал любому разрешению изображения. Когда я подзапрос изображения, я буду использовать imresize в MATLAB, чтобы помочь с изменением размера изображения, и я укажу коэффициент выборки 0.5, чтобы обозначить подвыборку на 2. Причина, по которой я бы использовал цикл while, потому что мы можем продолжать циклизацию и изменение размера до. Один из размеров измененного размера - 1. Когда это так, больше нет масштабов для обработки, и поэтому мы можем выйти.

Как таковой:

%// Read in image and get dimensions 
im = imread('cameraman.tif'); 
[rows,cols] = size(im); 

%// Declare output image 
out = zeros(rows, round(1.5*cols), 'uint8'); 
out(:,1:cols) = im; %// Place original image to the left 

%// Find first subsampled image, then place in output image 
im_resize = imresize(im, 0.5, 'bilinear'); 
[rows_resize, cols_resize] = size(im_resize); 
out(1:rows_resize,cols+1:cols+cols_resize) = im_resize; 

%// Keep track of the next row we need to write at 
rows_counter = rows_resize + 1; 

%// For the rest of the scales... 
while (true) 
    %// Resize the image 
    im_resize = imresize(im_resize, 0.5, 'bilinear'); 
    %// Get the dimensions 
    [rows_resize, cols_resize] = size(im_resize); 
    %// Write to the output 
    out(rows_counter:rows_counter+rows_resize-1, cols+1:cols+cols_resize) = ... 
     im_resize; 

    %// Move row counter over for writing the next image 
    rows_counter = rows_counter + rows_resize; 

    %// If either dimension gives us 1, there are no more scales 
    %// to process, so exit. 
    if rows_resize == 1 || cols_resize == 1 
     break; 
    end 
end 

%// Show the image 
figure; 
imshow(out); 

Это изображение я получаю:

enter image description here

+0

Я получаю черное изображение на выходе. Более того, все масштабированные изображения присутствуют в массиве L {}. Я добавил ваш код с моим в вышеупомянутом сообщении. Не могли бы вы рассказать об этом? – nikhilk

+2

@nikhilk - Ваш код работает. Но причина, по которой вы получаете полностью черный цвет, - это то, что ваши изображения «двойные» и нормализованы между «[0,1]». Я предположил, что ваши изображения были 'uint8', и поэтому ожидаемый диапазон находится между' [0,255] '. Если вы сделаете вывод 'uint8', и если ваши интенсивности находятся между' [0,1] ', то вы ничего не увидите! Таким образом, вместо этого вместо этого измените выражение 'out':' out = zeros (rows, round (1.5 * cols)); '. – rayryeng

+0

Ой, понял. Спасибо :) – nikhilk

Смежные вопросы