概述
图像平移
对于图像的平移,MATLAB中是可以利用膨胀函数平移图像。
代码:
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别人的,她用的矩阵变换和我的不一样,但是原理相同):
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了(就是这么简单,哈哈)。
代码(这个才是我写的):
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--数字图像处理 图像平移所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复