资源简介

扩散滤波实现图像增强,包括高斯滤波预处理,梯度计算,结构张量计算,扩散张量计算,数值离散以及增强效果评估代码

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%扩散滤波函数%%%%%%%%%%%%%%
function [uttn] = CoherenceFilter(uOptions)
%COHERENCEFILTER函数用来进行2D灰度图像的一致性扩散增强,该方法可以在保护边缘的同时降低图像噪声,并平滑图像由于噪声导致的边缘断裂
% Iout = CoherenceFilter(Iin Options)
%输入:
%   Iin     : 2D灰度图像
%   Options : 滤波的各个参数
%输出:
%   Iout    : 处理后的图像
% Options
%   Options.T      :  总的扩散时间
%   Options.dt     :  扩散时间步长 五种扩散方案默认值为0.2
%   Options.sigma  :  高斯滤波的Sigma值,默认为1                  
%   Options.rho    :  计算结构张量时高斯平滑的Sigma值,默认为1
%   Options.Scheme :  用数值表示各扩散方案
%                     ‘S‘标准离散化
%                     ‘N‘非负离散化
%                     ‘I‘隐式离散化
%                     ‘R‘旋转不变方案,标准离散化(隐式)5x5内核模板(默认)
%                     ‘O‘优化的求导内核
%   Weickert方程中决定扩散幅度的常量
%   Options.C      :  默认值为 1e-10
%   Options.m      :  默认值为 1
%   Options.alpha  :  默认值为 0.001
%算法分析:
%   1对图像进行高斯预处理;
%   2计算结构张量、特征值、特征向量;
%     (图像边缘给出特征值 特征向量指向最大特征值的方向,用来描述边缘方向)
%   3 计算扩散张量;
%   4 用一个有限差分方案来进行扩散;
%   5 回到步骤1,直到达到规定的扩散时间.
%
% 注释
% 标准和非负的扩散仅允许小的扩散时间步长,不然离散会变得不稳定;隐式、旋转不变和优化扩散方案允许大的扩散时间步长。 
% 举例2D
%   I = im2double(imread(‘LUNG2‘));
%   I = rgb2gray(I);
%   JS = CoherenceFilter(Istruct(‘T‘1‘rho‘1‘Scheme‘‘S‘));
%   JN = CoherenceFilter(Istruct(‘T‘1‘rho‘1‘Scheme‘‘N‘));
%   JI = CoherenceFilter(Istruct(‘T‘1‘rho‘1‘Scheme‘‘I‘));
%   JR = CoherenceFilter(Istruct(‘T‘1‘rho‘1‘Scheme‘‘R‘));
%   JO = CoherenceFilter(Istruct(‘T‘1‘rho‘1‘Scheme‘‘O‘));
%   figure 
%   subplot(231) imshow(I) title(‘原始图像‘);
%   subplot(232) imshow(JS) title(‘标准方案‘);
%   subplot(233) imshow(JN) title(‘非负方案‘);
%   subplot(234) imshow(JI) title(‘隐式方案‘);
%   subplot(235) imshow(JR) title(‘旋转不变方案‘);
%   subplot(236) imshow(JO) title(‘优化方案‘);
%
%增加所有所需函数的路径

try %用到try catch 函数:如果执行try语段出错,转而执行catch语段
    functionname=‘CoherenceFilter.m‘;
    functiondir=which(functionname);
    functiondir=functiondir(1:end-length(functionname));
    addpath([functiondir ‘/functions2D‘])%将functions2D文件夹添加到matlab搜索路径
    addpath([functiondir ‘/functions‘])%将functions文件夹添加到matlab搜索路径
catch me
    disp(me.message);
end

%设置默认参数
defaultoptions=struct(‘T‘2‘dt‘[]‘sigma‘ 1 ‘rho‘ 1‘Scheme‘‘S‘  ‘C‘ 1e-10 ‘m‘1‘alpha‘0.001);

if(~exist(‘Options‘‘var‘))%如果不存在输入参数,则使用默认参数
    Options=defaultoptions;
else %否则的话,使用用户输入的参数
    tags = fieldnames(defaultoptions);%fieldnames:将defaultoptions结构体中的变量名赋值给tags
    for i=1:length(tags)
        if(~isfield(Optionstags{i}))  Options.(tags{i})=defaultoptions.(tags{i}); end %isfield:判断输入是否是结构体数组的成员
    end
    if(length(tags)~=length(fieldnames(Options)))
        warning(‘CoherenceFilter:unknownoption‘‘unknown options found‘);
    end
end

if(isempty(Options.dt))%如果用户没有输入dt值,则取以下默认值
    switch lower(Options.Scheme) 
      case ‘s‘ Options.dt=0.2;
      case ‘n‘ Options.dt=0.2;
      case ‘i‘ Options.dt=0.2;
      case ‘r‘ Options.dt=0.2;
      case ‘o‘ Options.dt=0.2;  
      otherwise
        error(‘CoherenceFilter:unknownoption‘‘unknown scheme‘);
    end
end
    
%%%%%%%%各向异性扩散的主循环程序%%%%

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        429  2013-05-09 16:45  二维扩散滤波用于图像增强\functions2D\ConstructDiffusionTensor2D.m

     文件        591  2013-05-23 11:04  二维扩散滤波用于图像增强\functions2D\diffusion_scheme_2D_rotation_invariant.m

     文件       1766  2013-05-23 11:04  二维扩散滤波用于图像增强\functions2D\diffusion_scheme_2D_implicit.m

     文件       2112  2013-05-23 11:04  二维扩散滤波用于图像增强\functions2D\diffusion_scheme_2D_optimized.m

     文件       1221  2013-05-23 11:05  二维扩散滤波用于图像增强\functions2D\diffusion_scheme_2D_standard.m

     文件       1016  2013-05-23 11:05  二维扩散滤波用于图像增强\functions2D\EigenVectors2D.m

     文件       1636  2013-05-10 14:06  二维扩散滤波用于图像增强\functions2D\diffusion_scheme_2D_non_negativity.m

     文件        580  2013-05-10 16:51  二维扩散滤波用于图像增强\functions2D\StructureTensor2D.m

     文件       2257  2013-05-23 10:59  二维扩散滤波用于图像增强\functions\imgaussian.m

     文件        912  2013-05-23 11:02  二维扩散滤波用于图像增强\functions\derivatives.m

     文件       1141  2013-05-23 14:40  二维扩散滤波用于图像增强\test_shiyan1.m

     文件       5247  2013-05-23 11:03  二维扩散滤波用于图像增强\CoherenceFilter.m

     文件       1511  2013-05-23 14:48  二维扩散滤波用于图像增强\test_shiyan2.m

     文件       1256  2013-05-23 11:03  二维扩散滤波用于图像增强\compare.m

     文件     177742  2013-04-17 09:29  二维扩散滤波用于图像增强\LUNG2.png

     目录          0  2013-05-29 16:11  二维扩散滤波用于图像增强\functions2D

     目录          0  2013-05-29 16:11  二维扩散滤波用于图像增强\functions

     目录          0  2013-05-29 16:11  二维扩散滤波用于图像增强

----------- ---------  ---------- -----  ----

               199417                    18


评论

共有 条评论