matlab нахождение пиксельной медианы для серии изображений

#image #matlab #image-processing #pixel

#изображение #matlab #обработка изображений #пиксель

Вопрос:

Я пытаюсь найти значение пиксельной медианы для серии изображений dicom в matlab.

Мой массив изображений имеет размер (256, 256, 20), причем 20 — это 20 изображений.

Я новичок в matlab и думаю, что делаю что-то ужасно неправильное, поскольку мой код работает уже более часа. Вот оно:

 med_img = []
for k = 1:size(Im_Orig,1)
    for i = 1:size(Im_Orig,2)
        med_img(k,i) = median(Im_Orig(k,i,:))
    end
end

  

Я знаю, что по возможности следует избегать вложенных циклов for, но я не могу найти лучшего решения или найти хорошую функцию где-нибудь в Интернете.

Любая помощь была бы потрясающей!

Комментарии:

1. Просто чтобы уточнить, вы пытаетесь найти медиану для 20 изображений в этом случае правильно?

2. Я пытаюсь найти медианное значение для каждого пикселя. Затем я найду изображение, наиболее близкое к этому пикселному медианному «изображению». Это в значительной степени нахождение медианного изображения.

3. Подавление вывода путем добавления точки с запятой в строку med_img(k,i) = median(Im_Orig(k,i,:)); должно сработать. Кроме того, предварительное распределение размера массива также может повысить скорость.

Ответ №1:

Нахождение медианного изображения среди набора изображений

Это должно принимать медиану вдоль 3-го измерения, которая соответствует медиане между каждым из соответствующих пикселей.

Взятие медианы вдоль 3-го измерения

Метод 1: получение медианы по третьему измерению:

 %Random data simulating image%
Image = round(255.*rand(256,256,20));

Dimension = 3;
Median_Image = median(Image,Dimension);
  

Метод 2: использование циклов for и получение медианы каждого нисходящего вектора / столбца:

 %Random data simulating image%
Image = round(255.*rand(256,256,20));

%Grabbing dimensions of multi-image array%
[Image_Height,Image_Width,Number_Of_Images] = size(Image);


Median_Image = zeros(Image_Height,Image_Width);

for Row = 1: Image_Height
   for Column = 1: Image_Width 
    
Median_Image(Row,Column) = median(Image(Row,Column,:),'all');
       
    
   end
end
  

Запускался с использованием MATLAB R2019b

Комментарии:

1. Большое вам спасибо! Оба метода работали отлично и выполнялись очень быстро.