[matlab数字图像处理7]对一副图像加噪,进行几何均值,算术均值,谐波,逆谐波处理,显示图像的结果

一、 问题描述

对一副图像加噪,进行几何均值,算术均值,谐波,逆谐波处理,显示图像的结果;

二、 求解思路

利用imread和rgb2gray函数获取图像的灰度化矩阵,对于四种处理,分别建立四种变换的函数,按照
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四个式子对图像进行处理,处理后分别显示,进行对比

三、 程序代码

clear;
clc;
close all
x=imread('3.png');
x=rgb2gray(x);
figure(1)
subplot(4,2,1)
imshow(x)
title('原图')
x1=imnoise(x,'gaussian');
subplot(4,2,2)
imshow(x1)
title('加高斯噪声后的图像')
junzhi=ones(3);
x1_1=fun_suanshu(x1,junzhi);
subplot(4,2,3)
imshow(x1_1,[])
title('加高斯噪声后用算术均值滤波器')
%注意直接使用阶乘会导致数据结构为uint8(最大值为255)
%计算时应注意改变数据类型为double
p=ones(3);
x1_2=fun_jihe(x1,p);
subplot(4,2,4)
imshow(x1_2,[])
title('加高斯噪声后用几何均值滤波器') 
subplot(4,2,5)
x1_3=fun_xiebo(x1,p);
imshow(x1_3,[]);
title('加高斯噪声后用谐波均值滤波器') 
subplot(4,2,6)
x1_4=fun_nixiebo(x1,p,1.5);
imshow(x1_4,[])
title('加高斯噪声后用逆谐波均值滤波器(Q=1.5)') 
subplot(4,2,7)
x1_5=fun_nixiebo(x1,p,-1.5);
imshow(x1_5,[])
title('加高斯噪声后用逆谐波均值滤波器(Q=-1.5)')

在这里插入图片描述

%算术滤波处理函数

function y=fun_suanshu(x,t)
     %x为原图像
     %t为掩膜
     row=size(x,1);
     col=size(x,2);
     new_x=zeros(row+2,col+2);
     for i=2:row+1
         for j=2:col+1
             new_x(i,j)=x(i-1,j-1);
         end
     end
     y=zeros(row,col);
     row_t=size(t,1);
     col_t=size(t,2);
     for i=1:row
         for j=1:col
             y_k=new_x(i:i+row_t-1,j:j+col_t-1);
             y(i,j)=sum(sum(y_k.*t));
         end
     end
end

%几何滤波处理函数

function y=fun_jihe(x,t)
     %x为原图像
     %t为大小为需要的大小,且全为1的矩阵
     row=size(x,1);
     col=size(x,2);
     tem_y=x;
     row_t=size(t,1);
     col_t=size(t,2);
     for i=(row_t+1)/2:row-(row_t+1)/2
         for j=(col_t+1)/2:col-(col_t+1)/2
             y_k=tem_y(i:i+row_t-1,j:j+col_t-1);
             tem1=cumprod(double(y_k));
             tem2=tem1(end,:);
             tem3=cumprod(tem2);
             tem4=tem3(end);
             if tem4==0
                 y(i,j)=0;
             else
                  y(i,j)=power(tem4,1/(row_t*col_t));
             end
         end
     end
end

%谐波滤波处理函数

function y=fun_xiebo(x,t)
     %x为原图像
     %t为掩膜
     row=size(x,1);
     col=size(x,2);
     new_x=zeros(row+2,col+2);
     for i=2:row+1
         for j=2:col+1
             new_x(i,j)=x(i-1,j-1);
         end
     end
     y=zeros(row,col);
     row_t=size(t,1);
     col_t=size(t,2);
     for i=1:row
         for j=1:col
             y_k=new_x(i:i+row_t-1,j:j+col_t-1);
             y(i,j)=row_t*col_t/sum(sum(1./(y_k.*t)));
         end
     end
end

%逆谐波滤波处理函数

function y=fun_nixiebo(x,t,Q)
     %x为原图像
     %t为掩膜
     row=size(x,1);
     col=size(x,2);
     new_x=zeros(row+2,col+2);
     for i=2:row+1
         for j=2:col+1
             new_x(i,j)=x(i-1,j-1);
         end
     end
     y=zeros(row,col);
     row_t=size(t,1);
     col_t=size(t,2);
     for i=1:row
         for j=1:col
             y_k=new_x(i:i+row_t-1,j:j+col_t-1);
             y(i,j)=sum(sum((y_k.*t).^(Q+1)))/sum(sum((y_k.*t).^(Q)));
         end
     end
end

四、 实验心得

在处理图像的灰度化矩阵计算时,注意将矩阵转化为double类型,否则计算时系统自动赋值结果为uint8,此类型最大值为255,将会导致输出结果错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值