数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序

一.原理

1.公式

 

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第1张图片

r:  模板的半径,模板矩阵的尺寸就是  [ 2r+1 ][ 2r+1 ],   模板最好是奇数

Y:阈值函数,范围在[0,255]

x:输入值,当前检测的像素点

xout:输出值,作为计算结果,覆盖掉x

xi: 当前矩阵中的全部元素.   

  •        当 xi 进行加减运算时,是对矩阵每个元素单独加减.结果还是一个矩阵.

w=1 - abs (imgn( i - r:i + r , j - r:j + r ) - imgn( i , j )) / ( 2.5 * T ) ;

的结果 w (式子中 未累加的分母) 是一个[2r+1][2r+1]的矩阵

  •         当 xi 进行乘除运算时,也是对矩阵每个元素单独加减.即   点乘.*    点除 ./

2.模板矩阵

举例,半径r=3px,矩阵=[7][7]

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第2张图片

 

3.扩展矩阵

为了边界扩展,生成一个 imgn 矩阵来容纳 img 和边界

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第3张图片

依次填充:

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第4张图片数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第5张图片数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第6张图片数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第7张图片数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第8张图片

 

二.代码 

Surface Blur.m

function [img] = SurfaceBlur(A,r,T)
%UNTITLED10 此处显示有关此函数的摘要
        %srcData:源图像
        %r:半径
        %T:阈值
        %
%   此处显示详细说明

w=zeros(2*r+1,2*r+1);   %模板矩阵的尺寸

%图像初始化处理
img=rgb2gray(A);                                        %源图片转灰度图
subplot(1,2,1),imshow(img);title("原图");
img=double(img);                                        %转为矩阵

%解决边界值问题
[m,n]=size(img);                                        
imgn=zeros(m+2*r,n+2*r);                                %创建一个长宽各增加[2r]的扩容矩阵
imgn(r+1:r+m,r+1:r+n)=img;

imgn(1:r,r+1:r+n)=img(1:r,1:n);                         %上边界填充
imgn(1:m+r,n+r+1:n+2*r)=imgn(1:m+r,n+1:n+r);            %右边界填充
imgn(m+r+1:m+2*r,r+1:n+2*r)=imgn(m+1:m+r,r+1:n+2*r);    %下边界填充
imgn(1:m+2*r,1:r)=imgn(1:m+2*r,r+1:2*r);                %左边界填充

%开始计算每个像素,共计算m*n次
for i=r+1:r+m
    for j=r+1:r+n   %遍历imgn 中部的源img部分
        %计算式子的分母
        w=1-abs(imgn(i-r:i+r,j-r:j+r)-imgn(i,j))/(2.5*T);   %w是一个以img中的元素为核心,size=[2r+1][2r+1]的矩阵,这样的模板会计算m*n次
        
         %灰度值溢出检查
        for p=1:2*r+1 
            for q=1:2*r+1              
                if w(p,q) <=0
                    w(p,q)=0;
                end
            end
        end
        
        %计算式子的分子
        s=w.*imgn(i-r:i+r,j-r:j+r); 
        %计算总式
        imgn(i,j)=sum(sum(s))/sum(sum(w));      %一个sum()对一维数组求和,sum(sum())就是对二维矩阵求和  
    end
end

img=imgn(r+1:r+m,r+1:r+n);  %从imgn截取出源img部分
subplot(1,2,2),imshow(mat2gray(img));title("SurfaceBlur算法后");
end

调用该函数

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第9张图片

 

输出结果:

数字图像处理 | 图像增强 |图片的模糊算法 | Matlab表面模糊程序_第10张图片

 

你可能感兴趣的:(数字图像处理)