图像处理几何运算

2020/06/19 01:38

图像的几何运算可以使得图像的几何形状发生变化,与点运算不同,几何运算可以看作像素在图像内移动过程,这个过程会改变图像物体对象之间的空间关系,本节就将针对matlab中图像处理几何运算进行介绍:

图像的插值

图像插值是指利用已知邻近像素点的灰度值来产生未知像素点的灰度值,使得原始图像具有更高的分辨率。

interp2函数用于用于对图像进行插值,该函数的调用格式如下:

J=interp2(X,Y,I,X1,Y1);

X,Y表示原始像素值,X1,Y1插入新的像素,I表示原始图像,J表示插值后的图像

示例:对图形进行插值

编写对应的m文件如下:

clear all;

I=imread('cameraman.tif');

subplot(2,2,1)

imshow(I);

title('原始图像');

J1=interp2(double(I),2,'nearest');%%最邻近插值法%%

J2=interp2(double(I),2,'spline'); %%三次样条插值%%

J3=interp2(double(I),2,'linear'); %%线性插值%%

subplot(2,2,2)

imshow(uint8(J1));

title('最邻近插值法');

subplot(2,2,3)

imshow(uint8(J2));

title('三次样条插值法');

subplot(2,2,4)

imshow(uint8(J3));

title('线性插值法');

程序运行结果如下图:

图像的旋转

imrotate函数用于实现图像的旋转,其调用格式如下:

J=imrotate(I,angle,method,bbox);

其中I表示原始图像,angle表示旋转角度,method表示插值方法,bbox表示旋转后的显示方法

示例:对图形进行旋转

编写对应的m文件如下:

clear all;

I=imread('pout.tif');

J=imrotate(I,60,'bilinear');%%对图像旋转60度,利用双线性插值法%%

subplot(1,2,1)

imshow(I);

title('原始图像');

subplot(1,2,2)

imshow(J);

title('旋转后的图像');

程序运行结果如下图:

图像的平移

图像平移变换应用的是直角坐标系的平移变换公式

示例:对图像进行平移

编写对应m文件如下:

clear all;

I=imread('peppers.png');

subplot(1,2,1)

imshow(I);

title('原始图像');

J=double(I);

J1=zeros(size(J));%%构造函数,像素默认为0%%

J2=size(J1);

X=60;

Y=60;

J3(X+1:J2(1),Y+1:J2(2),1:J2(3))=J(1:J2(1)-X,1:J2(2)-Y,1:J2(3));

subplot(1,2,2)

imshow(uint8(J3));

title('平移后图像');

程序运行后结果如下图:

图像的缩放

图像的缩放就是将原始图像进行放大或者缩小,imresize函数用于实现对图像的缩放,其调用格式如下:

J=imresize(I,K,method);

I,J分别表示原始图像,缩放后图像,K表示缩放系数,method插值方法,可以去nearest最邻近插值法,bilinear双线性插值法,bicubic双立方插值法

示例:利用imresize函数对图像进行插值

编写对应m文件如下:

clear all;

I=imread('office_5.jpg');

subplot(2,2,1)

imshow(I);

title('原始图像');

J1=imresize(I,4,'nearest');

subplot(2,2,2)

imshow(uint8(J1))

title('最邻近插值法放大4倍后图像');

J2=imresize(I,0.2,'bilinear');

subplot(2,2,3)

imshow(uint8(J1))

title('双线性插值法缩小0.2倍后图像');

J3=imresize(I,0.2,'bicubic');

subplot(2,2,4)

imshow(uint8(J3))

title('双立方插值法缩小0.2倍后图像');

程序运行结果如下图:

图像的裁剪

图像的裁剪是将我们不需要的部分进行删除,只保留我们感兴趣的部分,imcrop函数用于实现对图像的剪切,该函数调用格式如下:

J=imcrop(I);表示对灰度图进行剪切

J=imcrop(X,map);表示对索引图进行剪切

J=imcrop(RGB);表示对真彩图进行剪切

示例:对索引图进行剪切

clear all

[X,map]=imread('peppers.png');

colormap(map);

subplot(1,2,1)

imshow(X,map);

title('原始索引图');

X2=imcrop(X,map,[50 50 120 130]);%%指定剪切区域大小和位置%%

subplot(1,2,2)

imshow(X2);

title('剪切后索引图');

程序运行结果如下图:

图像的镜像

镜像特点使图像左右颠倒或这上下颠倒,图像镜像分为水平镜像和垂直镜像,flipud函数用于图像进行左右翻转

示例:对图像进行镜像变换

编写对应的m文件如下:

clear all;

I=imread('cameraman.tif');

subplot(2,2,1)

imshow(I);

title('原始图像');

h=size(double(I));

%%水平镜像%%

J1(1:h(1),1:h(2))=I(1:h(1),h(2):-1:1);

subplot(2,2,2)

imshow(uint8(J1));

title('水平镜像后的图像');

%%竖直镜像%%

J2(1:h(1),1:h(2))=I(h(1):-1:1,1:h(2));

subplot(2,2,3)

imshow(uint8(J2));

title('垂直镜像后的图像');

J3(1:h(1),1:h(2))=I(h(1):-1:1,h(2):-1:1);

subplot(2,2,4)

imshow(uint8(J3));

title('对角镜像后的图像');

程序运行结果如下图:

免费直播

    精选课程 更多

    注册电脑版

    版权所有 2003-2020 广州环球青藤科技发展有限公司