实验三 图像空间域平滑与锐化

1、图像平滑(去噪):编写超限像素平滑法,灰度最相近的K个邻点平均法(函数名称可以自定义),并对上面实验1选择的噪声图片进行处理,显示处理前后的各个图像,分析不同方法对不同噪声的处理效果及其优缺点。

%超限像素平滑法,5*5邻域

function [ output ] = smooth_method1(I,k )

[row,col]=size(I);

Inew=I;

for i=3:row-2

    for j=3:col-2

        Inew(i,j)=round(sum(sum(I(i-2:i+2,j-2:j+2)))/25);

    end

end

result=zeros(row,col);

for i=1:row

    for j=1:col

        if(abs(Inew(i,j)-I(i,j))>k)

            result(i,j)=Inew(i,j);

        else

            result(i,j)=I(i,j);

        end

    end

end

output=uint8(result);

end

%灰度最相近的K个邻点平均法,3*3窗口,算上中心值

function [ output ] = smooth_method2( I,k )

[row,col]=size(I);

Inew=I;

value=zeros(1,9);

value1=zeros(1,9);

for i=2:row-1

    for j=2:col-1

        value(1)=abs(I(i,j)-I(i-1,j-1));

        value(2)=abs(I(i,j)-I(i-1,j));

        value(3)=abs(I(i,j)-I(i-1,j+1));

        value(4)=abs(I(i,j)-I(i,j-1));

        value(5)=abs(I(i,j)-I(i,j));

        value(6)=abs(I(i,j)-I(i,j+1));

        value(7)=abs(I(i,j)-I(i+1,j-1));

        value(8)=abs(I(i,j)-I(i+1,j));

        value(9)=abs(I(i,j)-I(i+1,j+1));

        value1(1)=I(i-1,j-1);

        value1(2)=I(i-1,j);

        value1(3)=I(i-1,j+1);

        value1(4)=I(i,j-1);

        value1(5)=I(i,j);

        value1(6)=I(i,j+1);

        value1(7)=I(i+1,j-1);

        value1(8)=I(i+1,j);

        value1(9)=I(i+1,j+1);

        %冒泡排序

        for b=1:9

            for c=1:9-b

                if(value(c)>value(c+1))

                    temp=value(c);

                    value(c)=value(c+1);

                    value(c+1)=temp;

                    temp1=value1(c);

                    value1(c)=value1(c+1);

                    value1(c+1)=temp1;

                end

            end

        end

        %计算

        sum=0;

        for a=1:k

            sum=sum+value1(a);

        end

        Inew(i,j)=round(sum/k);

    end

end

output=uint8(Inew);

end

 

%主程序

I=imread('L:\图像处理\实验文件\pout.tif');

J=imnoise(I,'gaussian',0,0.02); %在图像i上叠加均值为0、方差为0.02的高斯噪声,得到含噪图像j

K=imnoise(I,'salt & pepper',0.04) %在图像i上叠加密度为0.04的椒盐噪声,得到含噪图像k

subplot(3,3,1);

imshow(I);

title('原图像');

subplot(3,3,4);

imshow(J);

title('高斯噪声图像');

subplot(3,3,7);

imshow(K);

title('椒盐噪声图像');

 

%超限像素平滑法(5*5邻域,阈值为30)

J1=smooth_method1(J,30);

subplot(3,3,5);

imshow(J1);

title('超限像素平滑法处理高斯噪声');

 

K1=smooth_method1(K,30);

subplot(3,3,8);

imshow(K1);

title('超限像素平滑法处理椒盐噪声');

 

%灰度最相近的K个邻点平均法,3*3窗口

J2=smooth_method2(J,5);

subplot(3,3,6);

imshow(J2);

title('灰度最相近的K个邻点平均法处理高斯噪声');

 

K2=smooth_method2(K,5);

subplot(3,3,9);

imshow(K2);

title('灰度最相近的K个邻点平均法');

2、图像锐化:编写梯度锐化算法函数my_grad(method,T);参数method可以是梯度算子、Roberts算子、Prewitt和Sobel算子,T是梯度阈值,根据参数method和T选用不同的算子和阈值进行锐化处理,用二值图像表示处理结果,小于T的用黑色表示,大于等于T的用白色表示。显示处理前后的各个图像,分析不同方法对锐化效果及其优缺点。

function [ output ] = my_grad(img, method,T )

    [m,n]=size(img);

    imgr = zeros(m,n);

    if(method==1)%梯度算子  倒三角差值

        for i=2:m-1

            for j=2:n-1

                  imgr(i,j)=abs(img(i,j)-img(i+1,j))+abs(img(i,j)-img(i,j+1));

%图像梯度

                if imgr(i,j)<T

                    imgr(i,j) = 0;

                else

                    imgr(i,j) = 255;

                end

            end

        end

    elseif(method==2)%Roberts算子 

      

        for i=2:m-1

            for j=2:n-1

               imgr(i,j)=abs(img(i,j)-img(i+1,j+1))+abs(img(i+1,j)-img(i,j+1));

%1-4,,加 3-2

                if imgr(i,j)<T

                    imgr(i,j) = 0;

                else

                    imgr(i,j) = 255;

                end

            end

        end

    elseif(method==3)%Prewitt算子

        %与Sobel算子相同,方程的形式相同,但其中系数不同:

        %可见:与Sobel算子不同,其重点没有放在接近于模板中心的像素点

        for i=2:m-1

            for j=2:n-1         

                imgr(i,j)=abs(img(i-1,j+1)+img(i,j+1)+img(i+1,j+1)-img(i-1,j-1)-img(i,j-1)-img(i+1,j-1)+img(i+1,j-1)+img(i+1,j)+img(i+1,j+1)-img(i-1,j-1)-img(i-1,j)-img(i-1,j+1));

%以 i,j为中心,3*3的矩阵,前面的3个竖线- 后面的三个 竖线,再整体加上

%以i,j为中心,3*3矩阵的  下面三个  减去上面三个     ,一起构成阈值

                if imgr(i,j)<T

                    imgr(i,j) = 0;

                else

                    imgr(i,j) = 255;

                end

            end

    end

        elseif(method==4)%Sobel算子

         %由于引入了加权平均,所以对图像中的随机噪声具有一定的平滑作用

        %由于采用间隔两行或两列的查分,边缘两侧的像素得到增强,锐化图像的边缘显得粗而亮

        %S_x,S_y可用卷积模板来实现:

        %可见:其重点放在接近于模板中心的像素点

        for i=2:m-1

            for j=2:n-1

                imgr(i,j)=abs(img(i-1,j+1)+2*img(i,j+1)+img(i+1,j+1)-img(i-1,j-1)-2*img(i,j-1)-img(i+1,j-1)+ img(i+1,j-1)+2*img(i+1,j)+img(i+1,j+1)-img(i-1,j-1)-2*img(i-1,j)-img(i-1,j+1));

%以 i,j为中心,3*3的矩阵,前面的3个竖线,中间值为2倍- 后面的三个 竖线,再整体加上

%以i,j为中心,3*3矩阵的  下面三个 中间值为2倍 减去上面三个     ,一起构成阈值

                if imgr(i,j)<T

                    imgr(i,j) = 0;

                else

                    imgr(i,j) = 255;

                end

            end

        end

end

output=uint8(imgr);

end

%主程序

I=imread('L:\图像处理\实验文件\pout.tif');

%I = rgb2gray(I);%将图像转为灰度图

I1=my_grad(I,1,20);

I2=my_grad(I,2,20);

I3=my_grad(I,3,20);

I4=my_grad(I,4,20);

subplot(2,3,1);

imshow(I);

title('原图像');

subplot(2,3,2);

imshow(I1);

title('梯度算子处理后的图像');

subplot(2,3,3);

imshow(I2);

title('Roberts算子处理后的图像');

subplot(2,3,4);

imshow(I3);

title('Prewitt算子处理后的图像');

subplot(2,3,5);

imshow(I4);

title('Sobel算子处理后的图像');

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫归棠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值