我是靠谱客的博主 野性音响,这篇文章主要介绍MATLAB--数字图像处理 图像平移,现在分享给大家,希望可以做个参考。

图像平移

对于图像的平移,MATLAB中是可以利用膨胀函数平移图像。
代码:

复制代码
1
2
3
4
5
6
I = imread('a1.jpg'); se = translate(strel(1), [50 140]);%将一个平面结构化元素分别向下和向右移动30个位置 J = imdilate(I,se);%利用膨胀函数平移图像 subplot(121);imshow(I), title('原图') subplot(122), imshow(J), title('移动后的图像');

效果图:
在这里插入图片描述
这里我重点说平移的基本原理及代码实现。

首先,我们必须要知道图像是怎么平移的?图像可以看成二维矩阵,由很多的像素点组成,假设一个像素点的坐标为(1,2),我们向下平移2个像素,向右平移3个像素,那么目标坐标就是(3,5)。这个在二维坐标中很好得出结果,无非就是横纵坐标加减偏移地址罢了,但是在矩阵中怎么算呢?其实这里有几种方法,但思维都是一样的。看原理:
假设(x0,y0)是原图像的点,Tx是x方向偏移量,Ty是y方向偏移量(图像处理一般向下为x轴,向右为y轴)。那么(x1,y1)可以由下图矩阵计算。

在这里插入图片描述
通过上面的矩阵运算,我们对原图像的中的每一个像素点进行该变换(仅仅是位置变换),得到新的坐标,然后在新坐标下显示原图像。

代码(这个是copy别人的,她用的矩阵变换和我的不一样,但是原理相同):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
I=rgb2gray(imread('a1.jpg'));%读入图片并转化为灰度图 subplot(1,2,1),imshow(I),title('原图'); %建立窗口,显示灰度图I [r,c]=size(I); %计算灰度图的大小,r表示行,c表示列,即通过size函数将灰度图I的行数存在矩阵的r中,列数存在矩阵的c中,这样就知道灰度图的大小是r×c dst=zeros(r,c); %建立r×c的0矩阵(平移结果矩阵),初始化为零(黑色) dx=50; %平移的x方向的距离,这里是竖直方向 dy=80; %平移的y方向的距离,这里是水平方向 tras=[1 0 dx;0 1 dy;0 0 1]; %平移变换矩阵 for i=1:r for j=1:c temp=[i;j;1]; %灰度图I要平移变换的点,这里用矩阵表示 temp=tras*temp; %矩阵相乘,得到三行一列的矩阵temp,即平移后的矩阵 x=temp(1,1); %把矩阵temp的第一行第一列的元素给x y=temp(2,1); %把矩阵temp的第二行第一列的元素给y if(x>=1&&x<=r)&&(y>=1&&y<=c)%判断所变换后得到的点是否越界 dst(x,y)=I(i,j); %得到平移结果矩阵,点(x,y)是由点(i,j)平移而来的,有对应关系 end end end subplot(1,2,2),imshow(uint8(dst)),title('平移后'); %建立窗口,显示平移后的图

效果图:
在这里插入图片描述
效果虽然达到了,但是,她的这种写法好像都变成了灰色图片。那么怎么得到和膨胀函数的效果一样呢?
这个也简单,我们只需要对原图像的三个通道分别平移,再合成就ok了(就是这么简单,哈哈)。
代码(这个才是我写的):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
t=imread('a1.jpg'); %分别提取三通道的矩阵 t_1=t(:,:,1) t_2=t(:,:,2) t_3=t(:,:,3) %这里不能是[m,n]=size(t),我们是用三个二维矩阵合成一个三维图片(这里图片看出三维,毕竟有RGB) [m,n,z]=size(t); % 定义偏移量 dx=50; dy=140; %定义新矩阵 ,存储新坐标 r_1=zeros(m,n); r_2=zeros(m,n); r_3=zeros(m,n); %martix 变换用的矩阵 martix=[1,0,dx;0,1,dy;0,0,1]; %坐标变换 for i=1:m for j=1:n tem=[i;j;1]; tem=martix*tem; x=tem(1,1); y=tem(2,1); if(x>=1&&x<=m)&&(y>=1&&y<=n) r_1(x,y)=t_1(i,j); r_2(x,y)=t_2(i,j); r_3(x,y)=t_3(i,j); end end end %得到三个新矩阵合成一张图片 rt=t rt(:,:,1)=r_1; rt(:,:,2)=r_2; rt(:,:,3)=r_3; %显示 subplot(1,2,1),imshow(t),title('原图'); subplot(1,2,2),imshow(rt),title('平移后');

效果图:
在这里插入图片描述

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

最后

以上就是野性音响最近收集整理的关于MATLAB--数字图像处理 图像平移的全部内容,更多相关MATLAB--数字图像处理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(102)

评论列表共有 0 条评论

立即
投稿
返回
顶部