首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB中大小n×n邻域对灰度图像的形态学扩展

MATLAB中大小n×n邻域对灰度图像的形态学扩展
EN

Stack Overflow用户
提问于 2013-12-29 19:49:27
回答 1查看 2.2K关注 0票数 0

膨胀过程是通过在图像A上放置结构元素B并以类似于卷积的方式在图像上滑动来实现的。

我理解灰度图像数学形态学膨胀背后的主要概念,但我仍然有一个问题:

用户可以不选择结构元素的值吗?换句话说,我们可以通过选择结构元素的大小和形状而不指定其元素来对图像执行扩展过程吗?

为了获得更高的精度,我将通过一个例子很好地解释我的问题:假设一个大小为I的灰度图像160 x 160被大小为8x8的邻域处理(在本例中是扩展的)。我没有指定这个邻域的元素,所以它们的元素来自图像本身。例如,我编写了下面的matlab代码:

代码语言:javascript
复制
Max_image = max_filter(I, [0 0 7 7]);

其中函数max_filter为:

代码语言:javascript
复制
[n m] = size(I); % n=160 and m=160
B = I; 
for i = 1:m-7,
    B(:,i) = max(I(:,i:i+7),[],2);
  end

 for i=m-7+1:m
    B(:,i) = max(I(:,i:min(end,i+7),[],2);
  end

 for i = 1:n-7,
    I(i,:) = max(B(max(1,i):min(end,i+7),:),[],1);
  end

  for i = n-7+1:n,
    I(i,:) = max(B(i:min(end,i+7),:),[],1);
  end

这是否仍被认为是一种形态扩张手术?回想一下,我使用了一个大小为8x8的结构元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-30 01:52:59

您的程序等效于使用ones(8)的结构元素(顺便说一句,您没有使用输入参数0 0 7 7,您不需要这样做):

代码语言:javascript
复制
I = [92    99     1     8    15    67    74    51    58    40
     98    80     7    14    16    73    55    57    64    41
      4    81    88    20    22    54    56    63    70    47
     85    87    19    21     3    60    62    69    71    28
     86    93    25     2     9    61    68    75    52    34
     17    24    76    83    90    42    49    26    33    65
     23     5    82    89    91    48    30    32    39    66
     79     6    13    95    97    29    31    38    45    72
     10    12    94    96    78    35    37    44    46    53
     11    18   100    77    84    36    43    50    27    59];

Max_image = max_filter(I, [0 0 7 7])会给你:

代码语言:javascript
复制
    99    99    97    97    97    75    75    75    72    72
    98    97    97    97    97    75    75    75    72    72
   100   100   100    97    97    75    75    75    72    72
   100   100   100    97    97    75    75    75    72    72
   100   100   100    97    97    75    75    75    72    72
   100   100   100    97    97    72    72    72    72    72
   100   100   100    97    97    72    72    72    72    72
   100   100   100    97    97    72    72    72    72    72
   100   100   100    96    84    59    59    59    59    59
   100   100   100    84    84    59    59    59    59    59

当您使用:

代码语言:javascript
复制
J1=imdilate(I,ones(8),'full');
J1(8:end,8:end)

它会给你完全相同的答案。

这就是为什么我昨天告诉你,它经常使用二进制图像掩码作为结构元素。您不需要选择掩码内的值,但需要选择大小(8*8)和形状。什么是形状?在二值图像中,填充1的元素决定形状。在您的代码中,您选择了8*8区域内的最大值,这相当于整个明亮的8*8方形掩模的图像膨胀。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20829398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档