【计算机视觉】数字图像处理基础知识题

2022-09-01 16:30:03 浏览数 (1)

本文是计算机视觉课程的平时练习汇总,所用到的图片和实验报告的获取方式见文末

题1

1、产生下图所示亮块图像 f1(x,y)(128×128大小,暗处=0,亮处=255),对其进行FFT。

(1)同屏显示原图f1和FFT(f1)的幅度谱图; (2)若令f2(x,y)=(-1)x y f1(x,y),重复以上过程,比较二者幅度谱的异同,简述理由; (3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。

(1) 原图f1和FFT(f1)的幅度谱图如图1所示

(2) 令

f2(x,y)=(-1)^(x y) f1(x,y)

,f2和FFT(f2)的幅度谱图如图2所示。

两者的异同: 不同点:f2的频谱是对f1频谱的移位。 相同点:频谱的实质没有改变,幅度等都没有发生变化。

(3) 将f2(x,y)顺时针旋转45度得到f3(x,y),FFT(f2)的幅度谱和FFT(f3)的幅度谱如图3所示。

matlab代码:

代码语言:javascript复制
% 生成第一问图像
f1=zeros(128,128);
for i=38:1:90
    for j=58:1:70
        f1(i,j)=255;
    end
end
% 第一小问
figure(1)
subplot(1,2,1);
imshow (f1);
subplot(1,2,2);
imshow (fft2(f1));
% 第二小问
for i=1:1:128
    for j=1:1:128
        f2(i,j)=(-1)^(i j)*f1(i,j);
    end
end
figure(2);
subplot(1,2,1);
imshow (f2);
subplot(1,2,2);
imshow (fft2(f2));
% 第三小问
figure(3);
f3=imrotate(f2,-45,'bilinear');%将f2顺时针旋转45度
subplot(1,2,1);
imshow(fft2(f2));%显示f2的频谱
title('FFT(f2)的幅度谱');
subplot(1,2,2);
imshow(fft2(f3));%显示f3的频谱
title('FFT(f3)的幅度谱');

题2

2.对512x512大小、256级灰度的数字图像l ena进行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。 本题采用了高斯滤波器来对图像进行低通和高通滤波。滤波器公式如下: 低通滤波(D_0为截止频率,本实验中取值为30Hz):

高通滤波(D_0为截止频率,本实验中取值为30Hz):

如图所示,图像经过低通滤波后,图像主体仍然保留,但羽毛、轮廓等高频信息被滤除,图像经过高通滤波后,图像主体信息被滤除,图像轮廓信息被提取出来。

matlab代码:

代码语言:javascript复制
data=imread('D:Desktop计算机视觉平时作业imglena.bmp'); 
figure(1);
subplot(2,2,1)
imshow(data);
title('原图');
subplot(2,2,2);
imshow(fft2(data));
title('幅度谱图');
%低通滤波
s=fftshift(fft2(data));
[M,N]=size(s);                    
n=2;   
%GLPF滤波d0=30 
d0=30;                             
n1=floor(M/2);                          %对M/2进行取整
n2=floor(N/2);                           %对N/2进行取整
for i=1:M 
    for j=1:N
        d=sqrt((i-n1)^2 (j-n2)^2);         %点(i,j)到傅立叶变换中心的距离
               h=1*exp(-1/2*(d^2/d0^2));  %GLPF滤波函数
        s(i,j)=h*s(i,j);                   %GLPF滤波后的频域表示
    end
end
s=ifftshift(s);                           %对s进行反FFT移动
s=uint8(real(ifft2(s)));                                     
subplot(2,2,3);      
imshow(s);     
title('低通滤波');
%高通滤波
p=fftshift(fft2(data));
[M,N]=size(p);                     %分别返回p的行数到M中,列数到N中
n=2;                                  %对n赋初值
%GHPF滤波d1=30
d1=30;                               
n3=floor(M/2);                        
n4=floor(N/2);                         
for i=1:M 
    for j=1:N
        dd=sqrt((i-n3)^2 (j-n4)^2);         %点(i,j)到傅立叶变换中心的距离
               h1=1-exp(-1/2*(dd^2/d1^2));  %GHPF滤波函数
        p(i,j)=h1*p(i,j);                   %GHPF滤波后的频域表示
    end
end
p=ifftshift(p);                           %对p进行反FFT移动
p=uint8(real(ifft2(p)));                                     
subplot(2,2,4);     
imshow(p);
title('高通滤波');

题3

3、对图像pollen进行如下处理: (1)使用直方图均衡化及直方图规定化,展示对比度拉伸的效果,要求先转化为灰度级L=8,再按要求转化,写出详细的过程,其中规定直方图为0,0,0,0.15,0.20,0.30,0.20,0.15 首先将图像pollen转化为灰度级L=8,如图5所示:

之后将其进行直方图均衡化和规定化,如图6所示:

从图中可以看出,原图中像素点大多为2/8和3/8灰度级,直方图均衡化之后,原图中像素点在各灰度级上均匀分布。直方图规定化之后,像素点的分布情况满足题目预设的分布条件。

(2)对直方图均衡化后的图像加入高斯噪声,用4-邻域平均法和中值滤波平滑加噪声图像(图像四周边界不处理,下同),同屏显示原图像、加噪图像和处理后的图像。

① 不加门限; ② 加门限

,(其中

) 原图像、加噪图像、不加门限平滑后图像,加门限后平滑后图像如图7所示:

matlab代码:

代码语言:javascript复制
% 第一小问
I=imread('D:Desktop计算机视觉平时作业imgpollen.tif');
figure(1);
subplot(1,2,1);
imshow(I);
title('原图');
% L=8灰度级
[wid, hei] = size(I);
img8 = zeros(wid, hei);
for i=1:wid
      for j=1:hei
          img8(i,j)=floor(I(i,j)/32);
      end
end
subplot(1,2,2);
imshow(uint8(img8),[0,7]);
title('灰度级L=8');
figure(2);
subplot(3,2,[1,2]);
imhist(I,8);
title('直方图');
J=histeq(I);
subplot(3,2,[3,4]);
imhist(J,8);
title('直方图均衡化');
subplot(3,2,[5,6]);
hgram=[0,0,0,0.15,0.20,0.30,0.20,0.15];
H=histeq(I,hgram);
imhist(H,8);
title('规定化后直方图');
% 第二小问
figure(3);
I1=imnoise(I,'gaussian'); %加高斯噪声
H1=[0 1 0;1 0 1;0 1 0]/4; %4×4领域模板
J1=imfilter(J,H1); %领域平均
subplot(1,4,1);
imshow(I); %显示图像I
title('原图像');
subplot(1,4,2);
imshow(I1);
title('加噪声后图像');
subplot(1,4,3);
imshow(J1);   
title('不加门限平滑后图像');
%加门限后滤波
T= 2*sum(I1(:))/500^2;
% T= 0;
im_T = zeros(500,500);
for i = 1:500
    for j = 1:500
        if abs(I1(i,j) - J(i,j))>T
            im_T(i,j) = J(i,j);
        else 
            im_T(i,j) = I1(i,j);
        end
    end
end
subplot(1,4,4);
imshow(im_T);
title('加门限后');

题4

4、(1)用Laplacian锐化算子(分

alpha=1

alpha=2

两种情况)对512x5 12大小、256级灰度的数字图像lena进行锐化处理,显示处理前、后图像。处理前后的图像如图8所示:

(2) 若令

则回答如下问题: ①

f(m,n)

g_1(m,n)

g_2(m,n)

之间有何关系? 三者的关系为:

g_2(m,n)

代表图像中的哪些信息?

g_2(m,n)

代表了原图像中的二阶梯度信息。

③ 由此得出图像锐化的实质是什么? 图像锐化的实质是将原图像与梯度信息叠加,对目标边缘进行增强。

matlab代码

代码语言:javascript复制
I=imread('D:Desktop计算机视觉平时作业imglena.jpg');
figure(1);
subplot(1,3,1);imshow(I);title('原始图像');
L=fspecial('laplacian');
L1=[0 -1 0;-1 5 -1;0 -1 0];
L2=[0 -2 0;-2 9 -2;0 -2 0];
LP1=imfilter(I,L1,'replicate');% α=1时的拉普拉斯算子
LP2=imfilter(I,L2,'replicate');% α=2时的拉普拉斯算子
subplot(1,3,2);imshow(LP1);title('Laplacian算子α=1锐化图像');
subplot(1,3,3);imshow(LP2);title('Laplacian算子α=2锐化图像');

题5

5、分别利用Roberts、Prewitt、Sobel、Laplacian、Canny边缘检测算子,对256级灰度的自然图像iris-Na、光学遥感图像bridge-RS、SAR图像road-SAR进行边缘检测,显示处理前、后图像,并阐述不同算法和数据源对结果的影响。 自然图像iris-Na:

光学遥感图像bridge-RS:

SAR图像road-SAR:

不同算法结果分析: Roberts算子采用对角方向相邻两像素之差,也被称作4点差分法,对噪声较敏感。从三种图像上可以看出,使用Roberts算子进行边缘检测,检测出的结果较为稀疏,仅包含部分图像主题信息。 Prewitt算子先求平均,再求差分来计算梯度,也被称作平均差分法。从三种图像上可以看出,使用Prewitt算子进行边缘检测,检测出的结果比Roberts算子的结果更加稠密一些,同时能够一定程度上抑制噪声的干扰。

Sobel算子当前行或列对应的值加权后,再进行平均和差分,也被称作加权平均差分法。从三种图像上可以看出,使用Sobel算子结果和使用Prewitt算子的结果近似,但其边缘模糊的程度要略低于Prewitt算子。 Laplacian算子是求像素点的二阶偏导,优点是各向同性、线性和唯一不变性;对孤立点及线段的检测效果好,缺点是对噪声敏感,对噪声有双倍加强作用;不能检测出边的方向,常产生双像素的边缘。相比与上述三种算子,Laplacian算子得到的结果得到的细节信息更多,但同时对于噪声较多的road-SAR效果较差。

Canny算子基本思想是找寻一幅图像中灰度强度变化最强的位置,首先它用高斯滤波来平滑图像,然后找寻图像的强度梯度,之后应用非最大抑制技术来消除边误检,最后应用双阈值的方法来检测和连接边界。从结果图上可以发现,Canny算子检测的结果最为丰富,很多细节信息都被检测出来,同时由于它独特的处理方法,边缘部分比较清晰。

不同数据源分析: 本题中使用的三种数据源,格式并不相同。检测时首先将图像转换成灰度图,然后再进行检测。其中,iris-Na和bridge-RS图像的噪声较少,road-SAR图像的噪声较多。

对于iris-Na图像,图像主体是鸢尾花,背景包含比较杂乱的枝叶信息。对于该图像,Roberts算子,Prewitt算子和Sobel算子都能较好地将图像主体边缘检测出来。Laplacian算子和Canny算子在此基础上能够检测出更多的细节信息。

对于bridge-RS图像,Roberts算子,Prewitt算子和Sobel算子同样能够将图像的主体桥梁检测出来,但对于两岸细节信息较为忽略,Laplacian算子和Canny算子能够捕捉到主体和细节信息。

对于road-SAR图像,由于包含了较多的噪声信息,Roberts算子,Prewitt算子的检测效果不太理想,而Sobel算子能够较少地受到噪声的影响,检测出图中两条公路的主体信息。Laplacian算子和Canny算子都在一定程度上将噪声信息进行了放大增强,导致最终结果的可识别性不如Sobel算子。

matlab代码:

代码语言:javascript复制
clear;
close all;
Img=imread('D:Desktop计算机视觉平时作业imgiris-Na.tif');
% Img=imread('D:Desktop计算机视觉平时作业imgbridge-RS.jpg'); 
% Img=imread('D:Desktop计算机视觉平时作业imgroad-SAR.png'); 
I = rgb2gray(Img);
figure(1)
%Roberts梯度法锐化
subplot(2,3,1);imshow(Img);title('原始图像');
S=edge(I,'Roberts');
subplot(2,3,2);imshow(S);title('Roberts梯度法锐化图像');
%Prewitt算子锐化
S=edge(I,'Prewitt');
subplot(2,3,3);imshow(S);title('Prewitt算子锐化图像');
%Sobel算子锐化
S=edge(I,'Sobel');
subplot(2,3,4);imshow(S);title('Sobel算子锐化图像');
%Laplacian算子锐化
S=edge(I,'log');
subplot(2,3,5);imshow(S);title('Laplacian算子锐化图像');
�nny算子锐化
Cimg = edge(I,'canny');
subplot(2,3,6);imshow(Cimg);title('Canny算子锐化图像');

图片和实验报告

图片和实验报告下载链接:https://download.csdn.net/download/qq1198768105/85837789

0 人点赞