关注作者了解更多
我的其他CSDN专栏
关注作者了解更多
资料来源于网络,如有侵权请联系编者
目录
[实验一 基于直方图均衡化实验](#实验一 基于直方图均衡化实验)
[实验二 空间域图像增强](#实验二 空间域图像增强)
[实验三 数字图像傅里叶变化、频域图像处理](#实验三 数字图像傅里叶变化、频域图像处理)
[实验四 基于Hough变换的边缘检测](#实验四 基于Hough变换的边缘检测)
[实验一 基于直方图均衡化实验](#实验一 基于直方图均衡化实验)
[实验二 空间域图像增强](#实验二 空间域图像增强)
[实验三 数字图像傅里叶变化、频域图像处理](#实验三 数字图像傅里叶变化、频域图像处理)
实验一 基于直方图均衡化实验
一、实验目的
编程实现下列功能:读出存储的黑白灰度图象并显示,显示灰度直方图,对图象进行直方图均衡化处理,显示处理后图象及直方图,画出灰度变换曲线,并存储处理后图象。
二、实验原理
直方图均衡化是基于灰度直方图的图像增强的一种方法,均衡化的目的是将原始图像的直方图变为均衡分布的行驶,将一非均匀灰度概率密度分布图像,通过寻求某种灰度变换,变成一幅具有均匀概率密度分布的图像。
三、实验环境与代码
Matlab
close all;clear all;clc
f = imread('E:\2233\lena.tiff\lena.bmp'); % 从目标路径读入图像
gray_f = im2gray(f); % 灰度化处理
hgram = ones(1,256);
J = histeq(gray_f); % 使用直方图均衡增强强度图像的对比度(默认n=64)
T = histeq(gray_f,hgram); % 直方图规定化
figure,
subplot(131);imshow(uint8(gray_f));title('原始灰度图像'); % 显示灰度原始图像
subplot(132);imshow(uint8(J));title('histeq均衡化结果'); % 显示均衡化后的结果图像
subplot(133);imshow(uint8(T));title('直方图规定化结果'); % 显示规定化均衡后的结果图像
figure,
subplot(131);imhist(gray_f);title('灰度图像直方图'); % 显示原始图像的直方图
subplot(132);imhist(J);title('histeq均衡化直方图'); % 显示均衡化后的直方图
subplot(133);imhist(T);title('规定化均衡后直方图'); % 显示规定化均衡后的直方图
四、实验过程记录
-
将待处理图像放到指定文件夹'E:\2233\lena.tiff\lena.bmp');,用imread函数读取
-
得到原始图像,和均衡化后的结果
3显示原始灰度直方图,均衡直方图和规定话均衡后直方图
五、结果与分析
代码运行正确,有图像得出,正确进行处理,有程序前后的灰度直方图得出,结果正确。
正确进行了图像灰度均衡化处理。
六、自评
通过使用matlab进行灰度直方图的分析,增加了我作为工程师的素养。
实验 二 空间域图像增强
一、实验目的
- 实现绝对均值,高斯加权均值平滑滤波器,中值滤波器
- 针对不同噪声模型退化的图像,引入适当的滤波模型去除噪声;
- 实现拉普拉斯(二阶微分算子)图像增强;实现Robert,Sobel等一阶微分算子用于图像增强。
- 理解Unsharp-Mask增强模型g(x,y)=f(x,y)+a[f(x,y)-fg(x,y)],并用于图像增强;
- (思考)利用imnoised(*,'',value)噪声添加函数,加入不同概率密度的噪声后,评估滤波器的平滑效果。
二、实验原理
空间滤波在图像处理领域应用广泛,通过把每个像素的值替换为该像素及其领域的函数值来修改图像。空间滤波器可以直接对图像本身进行平滑处理,锐化处理,或滤去相应的噪声。
三、实验环境与代码
1.均值滤波进行平滑处理代码
%使用自带函数
Matlab
Picture=imread('E:\2233\lena.tiff\lena.bmp');
subplot(1,4,1);imshow(Picture,[]);title('原图');
Tem_Smooth=fspecial('average',[3,3]);
P_Smooth1=imfilter(Picture,Tem_Smooth);
subplot(1,4,2);imshow(P_Smooth1,[]);title('均值滤波一次后图像');
P_Smooth2=imfilter(P_Smooth1,Tem_Smooth);
subplot(1,4,3);imshow(P_Smooth2,[]);title('均值滤波二次后图像');
P_Smooth3=imfilter(P_Smooth2,Tem_Smooth);
subplot(1,4,4);imshow(P_Smooth3,[]);title('均值滤波三次后图像');
2.利用sobel算子和拉普拉斯算子进行锐化处理
Matlab
figure;
Picture2=imread('E:\2233\lena.tiff\lena.bmp');
subplot(1,3,1);imshow(Picture2,[]);title('原图');
Tem_Sharpen1=fspecial('sobel');
P_Sharpen1=imfilter(Picture2,Tem_Sharpen1);
subplot(1,3,2);imshow(P_Sharpen1,[]);title('采用sobel算子锐化后图像');
Tem_Sharpen2=fspecial('laplacian');
P_Sharpen2=imfilter(Picture2,Tem_Sharpen2);
subplot(1,3,3);imshow(P_Sharpen2,[]);title('采用拉普拉斯算子锐化后图像');
3.使用均值滤波器对高斯噪声图像的滤除噪声处理
Matlab
clc;
clear;
close all;
%使用自带函数
Picture=imread('E:\2233\lena.tiff\lena-gaussiannoise.bmp');
subplot(1,4,1);imshow(Picture,[]);title('原图');
Tem_Smooth=fspecial('average',[3,3]);
P_Smooth1=imfilter(Picture,Tem_Smooth);
subplot(1,4,2);imshow(P_Smooth1,[]);title('均值滤波一次后图像');
P_Smooth2=imfilter(P_Smooth1,Tem_Smooth);
subplot(1,4,3);imshow(P_Smooth2,[]);title('均值滤波二次后图像');
P_Smooth3=imfilter(P_Smooth2,Tem_Smooth);
subplot(1,4,4);imshow(P_Smooth3,[]);title('均值滤波三次后图像');
四、实验过程记录
1进行均值滤波,对图像进行三次均值滤波,得到平滑处理后的图像
2利用sobel算子和拉普拉斯算子进行锐化处理,得到结果
3使用均值滤波器对高斯噪声图像的滤除噪声处理
五、结果与分析
利用matlab函数进行了图像平滑处理,图像锐化处理,图像滤除噪声,程序能运行,得到了想要的结果,且结果正确。
六、自评
掌握了利用matlab进行空间域图像处理的方法,增加了我作为工程师的素养。
实验 三 数字 图像傅里叶变化、频域图像处理
******一、******实验目的
- 熟悉傅里叶变换的基本性质,掌握FFT变换的原理和方法。
- 利用Matlab编程实现图像的傅里叶变换。分析图像二维频谱的分布特征。
- 保存傅里叶变换频谱的实部图像和虚部图像。
- 利用傅里叶变换频谱,实现频域的巴特沃斯低通滤波、高斯低通滤波、巴特沃斯高通滤波、高斯高通滤波。分析巴特沃斯低通滤波的阶数、截止半径参数和滤波效果之间的关系。
- 实现高频提升(高频加强)滤波。
二、实验原理
三、实验环境与代码
- 图像傅里叶变换
Matlab
clc;
clear all
I=imread('E:\2233\lena.tiff\lena.bmp');
f=im2gray(I);
figure(4);
subplot(2,2,1),imshow(f);
title('原图');
subplot(2,2,2),
F=fft2(f);
imshow(F);
title('傅里叶变换'); %二维傅里叶变换
FS=fftshift(F);%频率图 %频谱
S=log(1+abs(FS));
subplot(2,2,3);
imshow(S,[]);
title('直接变换频谱图');
fr=real(ifft2(ifftshift(FS)));%频域的图反变
ret=im2uint8(mat2gray(fr));%取其灰度图
subplot(2,2,4),imshow(ret);
title('逆傅里叶变换');
2对图像进行频域低通滤波
Matlab
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
I=imread('E:\2233\lena.tiff\lena.bmp');
I=im2gray(I);
I=im2double(I);
[m,n]=size(I);
M=2*m;N=2*n;%滤波器的行数和列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);%meshgrid(u,v)的作用是分别产生以向量u为行,向量v为裂的两个大小相同的矩阵
D=sqrt(U.^2+V.^2);%设置频率点(U,V)与频域中心的距离为D(U,V)
D0=40; %截止频率
H=double(D<=D0); %理想低通滤波器
J=fftshift(fft2(I,size(H,1),size(H,2)));%通过傅里叶变换将时域图像转换到频域图像,并移动到中心位置
K=J.*H; %滤波处理
L=ifft2(ifftshift(K)); %傅里叶反转换
L=L(1:m,1:n); %设置图像的大小
figure;
subplot(131),imshow(J);
subplot(132),imshow(I);
subplot(133),imshow(L);
3.对图像进行频域高通滤波
Matlab
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
I=imread('E:\2233\lena.tiff\lena.bmp');
I=im2gray(I);
I=im2double(I);
[m,n]=size(I);
M=2*m;N=2*n;%滤波器的行数和列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);%meshgrid(u,v)的作用是分别产生以向量u为行,向量v为裂的两个大小相同的矩阵
D=sqrt(U.^2+V.^2);%设置频率点(U,V)与频域中心的距离为D(U,V)
D0=40; %截止频率
H=double(D>D0); %理想高通滤波器
J=fftshift(fft2(I,size(H,1),size(H,2)));%通过傅里叶变换将时域图像转换到频域图像,并移动到中心位置
K=J.*H; %滤波处理
L=ifft2(ifftshift(K)); %傅里叶反转换
L=L(1:m,1:n); %设置图像的大小
figure;
subplot(131),imshow(J);
subplot(132),imshow(I);
subplot(133),imshow(L);
四、实验过程记录
1进行图像傅里叶变换,得到了傅里叶变换后的图像
2对图像进行频域低通滤波,得到了低通滤波后的图像
3对图像进行了频域高通滤波,得到了滤波后的图像
五、结果与分析
利用matlab进行了图像傅里叶变换,进行了频域低通滤波,频域高通滤波,得到了所需的结果。
六、自评
掌握了频率域图像增强的方法,丰富了我作为工程师的素养
实验 四 基于 Hough变换的边缘检测
一、实验目的
利用Hough变换检测车牌图像中的矩形车牌区域。
二、实验原理
- 霍夫变换(Hough Transform)是数字图像处理中的一种特征提取技术
- 常用于判断图像中哪些点共线
- 可以检测直线,也可以检测圆或椭圆
三、实验环境与代码
1.使用Hough变换实现线检测
Matlab
%%Hougn变换
I=imread('E:\2233\lena.tiff\lienceplate.bmp');
f=im2gray(I);%RGB-->gray
f=f(round(end/2):end,1:round(end/2));
BW=edge(f,'canny'); %edge:以灰度图像为输入,'canny'为边缘检测算子
% 输出BW为二值图像,边缘处为白(255)其余部分为黑(0)
imshow(f)
title('原始图像')
[row,col]=size(BW);
rhomax=round((row*row+col*col)^0.5);
A=zeros(2*rhomax,180); %这里,实际上rho的取值范围为[-rhomax,rhomax],
%但是为了后面进行数量统计,转变为[1,2rhomax]
for m=1:row
for n=1:col
if BW(m,n)>0 %判断为边缘
for theta=1:180
r=theta/180*pi; %角度转换
rho=round(m*cos(r)+n*sin(r));
%Hough变换
rho=rho+rhomax+1; %坐标平移
%这里的理解,首先matlab中数组是从1开始计数,所以+1;
%数组坐标不能<0,所以 +rhomax
A(rho,theta)=A(rho,theta)+1; %数量统计
end
end
end
end
[rho,theta]=find(A>130); %超过130个点视为共线,rho列号,theta行号
nma=length(rho);
figure,imshow(BW)
for i=1:nma
hold on
m=1:row;
r=theta(i)/180*pi;
n=(rho(i)-rhomax-m*cos(r))/(0.0001+sin(r));
plot(n,m,'w-','LineWidth',6);
End
title('hough线检测');
2利用hough变换实现边缘检测
Matlab
I=imread('E:\2233\lena.tiff\lienceplate.bmp');
Ihsv=rgb2hsv(I);
Iv=Ihsv(:,:,3); %提取v空间
Iedge=edge(Iv,'sobel'); %边沿检测
%新建窗口,绘图用
figure (2)
imshow(Iedge);
hold on
%得到霍夫空间
[H1,T1,R1] = hough(Iedge,'Theta',20:0.1:75);
%求极值点
Peaks=houghpeaks(H1,5);
%得到线段信息
lines=houghlines(Iedge,T1,R1,Peaks);
%绘制线段
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',4);
end
四、实验过程记录
- 利用hough变换进行线检测,得到结果
2利用hough变换实现边缘检测,得到所需结果
五、结果与分析
利用matlab实现了hough的边缘检测和线检测,得到了车牌图像的边缘和轮廓。
六、自评
掌握了利用matlab实现边缘检测和线检测的方法,提高了我作为工程师的素养