数字图像处理 实验三 数字图像的几何运算

发布于:2024-12-07 ⋅ 阅读:(138) ⋅ 点赞:(0)

一、实验目的

掌握图像的基本几何变换的方法

        1. 图像的平移 

        2. 图像的旋转

二、实验环境

        1. PC计算机

        2. MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox)

        3. 实验所需要的图片

三、实验原理

提示:图片平移就是实现运算

四、实验图像

           

图片名称:                       kugou.jpeg                                       QQ.jpeg

图片尺寸:                       512*512*3                                      512*512*3 

五、实验步骤和结果

练习用matalb命令实现图像的缩放、旋转和平移操作

1. 读入图像并显示。

A = imread('kugou.jpeg');  
imshow(A);

B = imread("QQ.jpeg");  
imshow(B);

2. 将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;选用其它图像,重复实验。

A1 = imresize(A, 1.5, 'nearest');  
imshow(A1);

B1 = imresize(B, 1.5, 'nearest');  
imshow(B1);

A2 = imresize(A, 1.5, 'bilinear');  
imshow(A2);

B2 = imresize(B, 1.5, 'bilinear');  
imshow(B2);

A3 = imresize(A, 1.5, 'bicubic');  
imshow(A3);

B3 = imresize(B, 1.5, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

3. 图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。

提示:用imresize函数,imresize函数的语法格式为:B = imresize(A, m, method)

这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear' (双线性插值),'bicubic'(双三次插值),默认为'nearest'。

A1 = imresize(A, 0.8, 'nearest');  
imshow(A1);
B1 = imresize(B, 0.8, 'nearest');  
imshow(B1);

A2 = imresize(A, 0.8, 'bilinear');  
imshow(A2);
B2 = imresize(B, 0.8, 'bilinear');  
imshow(B2);

A3 = imresize(A, 0.8, 'bicubic');  
imshow(A3);
B3 = imresize(B, 0.8, 'bicubic');  
imshow(B3);

A1 = imresize(A, 0.5, 'nearest');  
imshow(A1);
B1 = imresize(B, 0.5, 'nearest');  
imshow(B1);

A2 = imresize(A, 0.5, 'bilinear');  
imshow(A2);
B2 = imresize(B, 0.5, 'bilinear');  
imshow(B2);

A3 = imresize(A, 0.5, 'bicubic');  
imshow(A3);
B3 = imresize(B, 0.5, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

4. 图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。

提示:用imrotate函数,imrotate的语法格式为:B = imrotate(A, angle, method)

函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。

A1 = imrotate(A, 30, 'nearest');  
imshow(A1);
B1 = imrotate(B, 30, 'nearest');  
imshow(B1);

A2 = imrotate(A, 30, 'bilinea');  
imshow(A2);
B2 = imrotate(B, 30, 'bilinea');  
imshow(B2);

A3 = imrotate(A, 30, 'bicubic');  
imshow(A3);
B3 = imrotate(B, 30, 'bicubic');  
imshow(B3);

A1 = imrotate(A, 45, 'nearest');  
imshow(A1);
B1 = imrotate(B, 45, 'nearest');  
imshow(B1);

A2 = imrotate(A, 45, 'bilinea');  
imshow(A2);
B2 = imrotate(B, 45, 'bilinea');  
imshow(B2);

A3 = imrotate(A, 45, 'bicubic');  
imshow(A3);
B3 = imrotate(B, 45, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

5. 编写实现图像平移的函数。

% 编写实现图像平移的函数hmove,平移量为x0,y0,平移前图像矩阵为i
function [I]=hmove(i,x0,y0); 
[r,c]=size(i);               
I(r+x0,c+y0)=0;            % 平移后图像矩阵为I
for x=1:r;
    for y=1:c;
        x1=x+x0;
        y1=y+y0;
        I(x1,y1)=i(x,y);
    end;
end;

6. 调用平移函数,将灰度图平移100行20列,在同一个窗口中显示平移前和平移后的图像。

函数调用示例:I1=hmove(gray1,100,20);

I = im2double(A);  
I1=hmove(I, 100, 20);  
imshow(I1);

I = im2double(B);  
I1=hmove(I, 100, 20);  
imshow(I1);

六、实验思考

通过本次实验,初步掌握了图像的平移、旋转等图像的基本几何变换的方法。


网站公告

今日签到

点亮在社区的每一天
去签到