使用5x5窗口将图像双精度转换为逻辑。 MATLAB

时间:2014-12-06 16:57:45

标签: matlab image-processing

我有一个双重图像,我的目标是将其转换为逻辑。我想创建5x5窗口并将其放在图像中的每个像素上。然后,我计算这25个像素的平均值。如果中心像素值大于平均值,则为1.否则为0.

我该怎么做?

P.S。我不想这样做:

IM[i - 2, j - 2]
IM[i - 1, j - 2]
IM[i, j - 2]
IM[i + 1, j - 2]
IM[i + 2, j - 2]
      .
      .

2 个答案:

答案 0 :(得分:1)

有几种方法(运行时间可能按递减顺序):

  1. 使用nlfilter

    result = nlfilter(im, [5 5], @(x) x(3,3)>mean(x(:)));
    
  2. 使用blockproc

    result = blockproc(im, [1 1], @(x) x.data(3,3)>mean(x.data(:)), ...
        'Bordersize', [2 2], 'Trimborder', 0);
    

    请注意,对于blockproc,我们需要指定大小为1x1的块(以便块在每个方向上从一个像素移动到另一个像素),在wach像素周围的eacch方向上的大小为2的边界(得到5x5块),并防止修剪功能结果,因为结果只有1个值。

  3. 使用conv2

    result = im > conv2(im, ones(5,5)/25, 'same');
    

答案 1 :(得分:0)

如果我是对的,这似乎是一种异常方法。以下代码可能是您想要的:

mask   = 0.04 * ones(5); mask(3, 3) = 0; % // mask is for average the double image
avgIm  = filter2(mask, imd); % // imd is your double image.
output = imd > avgIm;