图像的恢复
实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像的复原。
实验环境
MATLAB R2010b版本、WIN 7计算机
相关知识
1.imhist
计算和显示图象的直方图,imhist函数的语法格式为:
imhist(I,n)
imhist(X,map)
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。
2. imnoise
给图像加入噪声,imnoise的语法格式为
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
参数type和parameters用于确定噪声的类型和相应的参数。
3. getrect
用鼠标截取感兴趣区
rect=getrect() ,在图像对话框中选取感兴趣区
返回感兴趣区左上角的坐标高度宽度[xmin ymin width height]
4. imcrop
得到感兴趣区域的图片
B=imcrop(J,rect); 得到感兴趣区域的图片
5. std2 计算图像的标准差
Y=std2(x)
6.信噪比的计算方法:图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,近似估计图像的信噪比为信号与噪声的方差之比,即SNR=10log(信号方差/噪声方差)
7.n阶Butterworth 陷波器的传递函数为:
其中D0为陷波器半径,D1,D2分别为点(u,v)到陷波器中心(u0,v0)和(-u0,-v0)的距离。该传递函数使得以陷波器中心为圆心,D0为半径的圆内的所有u,v对应的滤波函数H (u,v)输出为0,也即将位于(u0,v0)和(-u0,-v0)处的频率成分去除。
实验内容
一、 滤波&图像信噪比
- 给图像tou.jpg添加高斯噪声(均值为0,方差自己设置),并估计图像中的噪声的概率密度函数,用高斯及均值模板对图像进行滤波,计算滤波前后图像的信噪比。参考结果如下
实验要求
下面展示代码
。
clear; clc; close all;
im = imread('C:\pictures of QQshiyan\tou.jpg');
%% 添加高斯白噪声
im_gaus = imnoise(im, 'gaussian', 0, 0.008); % 添加均值为0,方差为0.2的高斯白噪声
figure;
subplot(2, 3, 1);
imshow(im); % 显示原始图像
title('原图像');
%% 计算snr
snr1=SNR1(im,im_gaus);
subplot(2, 3, 2);
imshow(im_gaus); % 显示添加高斯白噪声的图像
title(['高斯白噪声图像添加均值0方差0.008,snr=',num2str(snr1)]);
%% 噪声概率密度
rect=getrect();
B=imcrop(im_gaus,rect);
subplot(2,3,3)
imhist(B);%直接显示图像灰度直方图
title('直方图')
%% 高斯滤波
gn=5; %高斯滤波器的均值
k=7; %高斯滤波器的方差
A2=fspecial('gaussian',k,gn); %生成高斯序列
Y5=filter2(A2,im_gaus)/255; %用生成的高斯序列进行滤波
snr2=SNR1(im,Y5);
subplot(234),imshow(Y5),title(['高斯滤波,snr2=',num2str(snr2)]); %显示滤波后的图象
%% 均值滤波
%5*5 均值滤波
n=5;%均值滤波器模板大小;
A=fspecial('average',n); %生成系统预定义的5X5滤波器
Y=filter2(A,im_gaus)/255; %用生成的滤波器进行滤波,并归一化
snr3=SNR1(im,Y);
subplot(235);
imshow(Y); % 显示添加高斯白噪声的图像
title(['均值滤波,snr3=',num2str(snr3)]);
%% SNR:信噪比
function snr=SNR1(I,In)
I=im2double(I); %转换为double型,否则不能计算统计量
In=im2double(In);
snr=0;
a1=var(I(:));
a2=var(In(:));
snr=10*log10(a1/a2);
end
效果展示
二、图像的频域&陷波器&噪声模式
- 去除图像MRInoise.jpg的周期噪声。获取含噪声图像的频域图像,使用Matlab函数impixelinfo观察干扰噪声的频率成分,找出所有的(u0,v0)对,针对每一个噪声源分别设计相应的陷波器,对含噪声的图像进行滤波。显示原图像,频域图像,处理后的图像,估计的噪声模式。
实验要求
下面展示 代码
。
clear;
close all;
I=imread('C:\pictures of QQshiyan\MRInoise.jpg'); %读入图像
subplot(2,3,1),imshow(I),title('原始图像');
F=fft2(im2double(I)); %FFT
F=fftshift(F); %FFT频谱平移
O=abs(F);
T=log(O+1); %频谱对数变换
subplot(2,3,2),imshow(T,[]),title('原始图像其频谱图');
%% 定义陷波滤波器
[w,h] = size(I);
for i = 1:w
for j = 1:h
flt(i,j) = 1;
end
end
flt(257,193)=0;
flt(257,321)=0;
flt(193,257)=0;
flt(321,257)=0;
%% 滤波并显示结果图像
subplot(233);
imshow(flt);
title('陷波滤波器图像');
dFImg = F.*flt;
dFImg = ifftshift(dFImg);
dImg = ifft2(dFImg,'symmetric');
subplot(234);
imshow(dImg);
title('陷波滤波器滤波图像');
%% 估计噪声参数
F2=im2double(I)-dImg; %
subplot(235);
imshow(F2,[]);title('干扰噪声模式');
%% 定标
hp = impixelinfo;
效果展示