Hello Mat

 找回密码
 立即注册
查看: 3414|回复: 0

自适应平滑滤波

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-3-19 21:20:05 | 显示全部楼层 |阅读模式
    自适应平滑方法的原理其实就是根据图像在某点处的梯度来调整滤波掩膜的系数,如果某处梯度较大,说明此处很有可能是图像边缘,至少是图像突变部分,则掩膜系数较小,如果某处梯度较小,说明此处很有可能不是图像边缘,则掩膜系数较大,这样就能在滤波过程中对图像边缘进行一定的保留。
  1. function Z = adaptsmooth_filter(X,mn)
  2. % 函数对输入的二维图像矩阵进行自适应平滑滤波
  3. % input:
  4. %        X:输入的二维图像矩阵
  5. %        m:m行的滤波模板
  6. %        n:n列的滤波末班
  7. % output:
  8. %        Z:输出对m x n的二维图像矩阵的运算结果
  9. if nargin < 2
  10.     m = 3;  % 滤波模板尺寸
  11.     n = 3;
  12. end
  13. if size(X,3)~=1
  14.     error('图像应该为2维矩阵')
  15. end
  16. if ~isa(X,'double')
  17.     X = double(X)/255;  % 数据类型
  18. end
  19. m = mn(1);  n = mn(2);  % 模板大小
  20. [n1,n2] =size(X);
  21. X(n1:n1+m, n2:n2+n) = 0;   % 扩充,使得图像能够被m x n模板全部覆盖
  22. % 计算掩膜系数
  23. for i =1:size(X,1)-m
  24.     for j=1:size(X,2)-n
  25.         H = zeros(m,n);   % 初始化
  26.         for k=1:m
  27.             for l=1:n
  28.                 Gx = 0.5* ( X(k+i,l) - X(k+i-1,l) );
  29.                 Gy = 0.5* ( X(k,l+j) - X(k,l+j-1) );
  30.                 d = sqrt(Gx^2 + Gy^2);
  31.                 H(k,l) = exp(-d/2);
  32.             end
  33.         end
  34.         % 计算相关累加值
  35.         Z = H.*X(i:m+i-1,j:n+j-1);  
  36.         % 归一化
  37.         im1(i,j) = im2uint8( sum(Z(:))/sum(H(:)) );
  38.     end
  39. end
  40. Z = im1(1:n1,1:n2); % 去掉最边缘增加的行列

  41. end
复制代码
im1 = adaptsmooth_filter( im,[3,5] );  % 应用自适应平滑滤波


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-28 14:42 , Processed in 0.224864 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表