【问题标题】:matlab finding pixelwise median for a series of imagesmatlab找到一系列图像的像素中位数
【发布时间】:2021-02-21 23:56:57
【问题描述】:

我正在尝试在 matlab 中找到一系列 dicom 图像的像素中值。

我的图像数组的大小为 (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 循环,但我无法找到更好的解决方案或在线任何地方找到好的函数。

任何帮助都会很棒!

【问题讨论】:

  • 澄清一下,在这种情况下,您试图找到 20 张图像的中位数是否正确?
  • 我试图找到每个像素的中值。然后,我将找到最接近这个像素中位数“图像”的图像。它几乎是在寻找中间图像。
  • 通过在med_img(k,i) = median(Im_Orig(k,i,:)); 行添加分号来抑制输出应该可以解决问题。此外,预先分配数组的大小也可能有助于提高速度。

标签: image matlab image-processing pixel


【解决方案1】:

在一组图像中找到中间图像

这应该取沿第 3 维的中值,该中值对应于每个对应像素之间的中值。

方法一:沿三维取中值:

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

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

方法二:使用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 运行

【讨论】:

  • 非常感谢!两种方法都运行良好,运行速度非常快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多