Hello Mat

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

非线性复扩散滤波

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-9-21 21:50:12 | 显示全部楼层 |阅读模式
非线性复扩散滤波:
TMAX = 0.80;   % 扩散时间
[im_e, nIter, dTT] = NCD_filter(im, TMAX);  % 非线性复扩散滤波

  1. function [imgOutput, nIter, dtt] = NCD_filter(imgInput, Tmax)
  2. % 非线性复扩散滤波
  3. % 函数输入:
  4. %        imgInput - 含噪声的图像
  5. %        Tmax  - 扩散时间
  6. % 函数输出:
  7. %        imgOutput - f非线性复扩散滤波图像
  8. %        nIter  - 滤波迭代处理次数
  9. %        dtt    - 每一次迭代的时间步长
  10. % 设定默认的迭代扩散时间
  11. if nargin < 2 ;   % 输入个数小于2
  12.     Tmax  = 3.0 ; % Tmax默认赋值
  13. end

  14. % 初始化操作
  15. theta     = pi/30;           % 初始化
  16. j         = sqrt(-1);        % 初始化
  17. e_jxtheta = exp(j*theta);    % 初始化
  18. kappamin  =   2.0;           % 初始化
  19. kappamax  =  28.0;           % 初始化

  20. % 高斯滤波器
  21. wsize     = 3;  % 窗口大小 3 x 3
  22. wsigma    = 10; % 方差
  23. filter_gaussian    = fspecial('gaussian', wsize, wsigma);  % 滤波掩模
  24. % fspecial('gaussian', 3, 0.001)
  25. % ans =
  26. %      0     0     0
  27. %      0     1     0
  28. %      0     0     0
  29. % fspecial('gaussian', 5, 0.001)
  30. % ans =
  31. %      0     0     0     0     0
  32. %      0     0     0     0     0
  33. %      0     0     1     0     0
  34. %      0     0     0     0     0
  35. %      0     0     0     0     0
  36. % 扩散滤波器系数
  37. wsigma2    = 0.5; % 方差
  38. filter_gaussian2  = fspecial('gaussian', wsize, wsigma2);  % 滤波掩模

  39. lapKernel      = [0,1,0; 1,-4,1; 0,1,0]; % laplacian kernel
  40. gradKernel     = [-1/2,0,1/2];          % 梯度kernel
  41. [xSize, ySize] = size(imgInput);         % 图像维数

  42. Border = 2; % 图像边界2个像素点之间不进行梯度计算
  43. indexX = 1+Border:xSize+Border; % (1+Border):(xSize+Border)
  44. indexY = 1+Border:ySize+Border; % (1+Border):(xSize+Border)

  45. if ~isa(imgInput,'double')
  46.     yNCDF = double(imgInput); % 图像数据类型转换
  47. end

  48. t_iter = 0;  % 迭代时间累加和
  49. nIter = 0;  % 迭代次数

  50. while (Tmax - t_iter) > eps % 扩散时间
  51.     nIter = nIter + 1;
  52.     ryNCDF = real(yNCDF);  % 实部
  53.     iyNCDF = imag(yNCDF);  % 虚部
  54.    
  55.     % 滤波,见表达式(10.32)
  56.     localAvg = filter2(filter_gaussian, ryNCDF, 'same');
  57.     minlocalAvg = min(localAvg(:));   % 最小值
  58.    
  59.     % 自适应系数 k,见表达式(10.31)
  60.     k_mod = kappamax + (kappamin-kappamax)* ...
  61.         (localAvg - minlocalAvg) / (max(localAvg(:)) - minlocalAvg);
  62.     % 非线性复扩散函数
  63.     coefDif = e_jxtheta ./ (1 + ( (iyNCDF/theta) ./ k_mod ).^2);
  64.     coefDif = filter2(filter_gaussian, coefDif, 'same');

  65.     % 计算 laplacian and gradient
  66.     % lap(yNCDF)
  67.     yAux  = zeros(xSize+2*Border, ySize+2*Border);
  68.     yAux(indexX, indexY) = yNCDF;
  69.     del2Y = conv2(yAux, lapKernel, 'same');
  70.     del2Y = del2Y(indexX, indexY);
  71.    
  72.     % grad(yNCDF)
  73.     dAux  = conv2(yAux, gradKernel, 'same');  % 卷积
  74.     dYx   = dAux(indexX, indexY);
  75.     dAux  = conv2(yAux, gradKernel', 'same'); % 卷积
  76.     dYy   = dAux(indexX, indexY);
  77.    
  78.     % grad(coefDif)
  79.     dDx   = conv2(coefDif, gradKernel, 'same');  % 卷积
  80.     dDy   = conv2(coefDif, gradKernel', 'same'); % 卷积
  81.    
  82.     dIdt  = coefDif.*del2Y + dDx.*dYx + dDy.*dYy;
  83.    
  84.     % 计算自适应时间步长
  85.     dt = (1/4)*( 0.25 + 0.75*exp(- max(max( abs(real(dIdt)) ./ ryNCDF ))) );
  86.    
  87.     dtt(nIter) = dt;
  88.    
  89.     % 约束每一步的最大步长
  90.     if t_iter + dt > Tmax ;
  91.         dt = Tmax - t_iter ;
  92.     end
  93.     % 更新已经处理已经扩散的时间消耗
  94.     t_iter = t_iter + dt;
  95.    
  96.     % 更新 yNCDF
  97.     yNCDF = yNCDF + dt.*dIdt;
  98.    
  99. end % 结束,对应while (Tmax - t_iter) > eps

  100. imgOutput = real(yNCDF);  % 实部,图像输出

  101. end
复制代码






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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:14 , Processed in 0.222266 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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