kuwahara_filter滤波器----MATLAB

286 篇文章 34 订阅
236 篇文章 15 订阅
这段博客介绍了如何使用Kuwahara滤波器对图像进行去噪处理。首先,通过MATLAB代码读取并转换图像为灰度图像,然后添加高斯噪声。接着,应用Kuwahara滤波器来滤除噪声,最后展示原始图像与滤波后的图像对比。Kuwahara滤波器因其对图像边界轮廓的保护作用而被提及。
摘要由CSDN通过智能技术生成

在这里插入图片描述

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

figure,
subplot(121),imshow(im);title('原始图像')
colormap(jet)  % 颜色
shading interp % 消隐
im1 = kuwahara(im,5);
subplot(122),imshow(im1);title('kuwahara滤波图像')
colormap(jet)  % 颜色
shading interp % 消隐
function [Y,Xpad] = kuwahara(X,WINSZ)
% kuwahara_filter滤波器
% 对图像边界轮廓有较强的保护作用
% kuwahara nonlinear edge-preserving filtering
% 函数输入:
%          X:二维图像矩阵
%          WINSZ: window size
% 函数输出:
%          Y:滤波图像
%          Xpad:点扩展矩阵
% The Kuwahara filter 4块,(最直观的如下所示,5x5 pixels). 
%
%    ( a  a  ab   b  b)
%    ( a  a  ab   b  b)
%    (ac ac abcd bd bd)
%    ( c  c  cd   d  d)
%    ( c  c  cd   d  d)

if nargin < 2
    WINSZ = 5;  % 默认值
end

if ~isa(X,'double')
    X = im2double(X);  % double类型
end

Pad = floor(WINSZ/2);  % 向下取整

Xpad = padarray(X,[Pad, Pad],'replicate');  % 点扩展
% A = [ 1 2; 
%       3 4 ];
% B = padarray(A,[3 2],'replicate','post')
% B =
%      1     2     2     2
%      3     4     4     4
%      3     4     4     4
%      3     4     4     4
%      3     4     4     4
[padRows,padCols] = size(Xpad);                    % 求维数
Y = zeros(size(X));

nRowIters = length((Pad+1):(padRows-Pad));
count = 1;
for i = (Pad+1):(padRows-Pad)
    for j = (Pad+1):(padCols-Pad)
        % 分成每一个小窗,Q1~Q4
        w = Xpad((i-Pad):(i+Pad),(j-Pad):(j+Pad));
        wnw = w(1:(Pad+1),1:(Pad+1));
        wne = w(1:(Pad+1),(Pad+1):WINSZ);
        wsw = w((Pad+1):WINSZ,1:(Pad+1));
        wse = w((Pad+1):WINSZ,(Pad+1):WINSZ);
        % 计算方差
        s = var([wnw(:),wne(:),wsw(:),wse(:)]);
        m = mean([wnw(:),wne(:),wsw(:),wse(:)]);
        [y,k] = min(s);  
        % 计算均值
        Y(i,j) = m(k);
    end

end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值