MATLAB----beltrami滤波器

MATLAB----beltrami滤波器_第1张图片

%% beltrami滤波器
clc,clear,close all  % 清理命令区、清理工作区、关闭显示图形
warning off       % 消除警告
feature jit off      % 加速代码运行
[filename ,pathname]=...
    uigetfile({'*.bmp';'*.tif';'*.jpg';},'选择图片'); % 选择图片路径
str=[pathname filename]; % 合成路径+文件名
im = imread(str);        % 读图
im = imnoise(im,'gaussian',0,1e-3); % 原图像 + 白噪声

resim = beltrami2D(im, 30, 0.01);   % beltrami滤波
figure,
subplot(121),imshow(im);title('原始图像')
colormap(jet)  % 颜色
shading interp % 消隐
subplot(122),imshow(resim,[]);title('beltrami滤波图像')
colormap(jet)  % 颜色
shading interp % 消隐
function Fim = beltrami2D(im, num_iter, delta_t)
% beltrami滤波器   a NonLinear filter
% 函数输入:
%         im       - 灰度图像 (MxN).
%         num_iter - 迭代次数 
%         delta_t  - 时间步长
%               
% 函数输出:
%         Fim - (Filtered) image.

if ~isa(im,'double')
    im = double(im)/255;
end
% 梯度矩阵
hx=0.5.*[0 0 0; -1 0 1; 0 0 0]; % 水平 
hy=0.5.*[0 -1 0; 0 0 0; 0 1 0]; % 垂直
% 度量张量
hxx=[0 0 0; 1 -2 1; 0 0 0];% 水平
hyy=[0 1 0; 0 -2 0; 0 1 0];% 垂直
% xy
hxy=[1 0 -1; 0 0 0; -1 0 1];

Ik=im;  % 赋值

for i=1:num_iter
    
    Ixx=imfilter(Ik,hxx,'conv');% 滤波
    Iyy=imfilter(Ik,hyy,'conv');% 滤波
    Ix=imfilter(Ik,hx,'conv');  % 滤波
    Iy=imfilter(Ik,hy,'conv');  % 滤波
    Ixy=imfilter(Ik,hxy,'conv');% 滤波
%     对梯度下降方程积分
    Ikx=Ik+delta_t.*((Ixx.*(ones(size(Iy))+Iy.^2)+...
        Iyy.*(ones(size(Ix))+Ix.^2)-2.*Ix.*Iy.*Ixy)./(ones(size(Ix))+Ix.^2+Iy.^2).^2);
    Fim= Ikx;
    Ik = Ikx;
end


你可能感兴趣的:(数据可视化,可视化,MATLAB可视化,matlab,图论,几何学,矩阵,线性代数)