图像的几何变换在图像处理中被经常使用,其中图像错切变换也是常用的图像变换。图像错切错切变换包括水平方向错切变换和竖直方向错切变换,本文给出了灰度图像和彩色图像的水平方向错切变换的数学原理及matlab实现。
错切变换示意图如下图所示:
错切变换数学原理很简单,就是简单的矩阵乘法。本文给出了图像水平方向错切变换的Matlab详细实现过程(纯手工)。
假设变换之前的坐标为(x,y),变换之后的坐标为(x*, y*),则沿水平方向错切变换变换公式的矩阵形式为:
其中系数b是错切比例(其实就是斜率)。
展开之后就是:
由此可以看出水平方向的错切变换就是针对列坐标x进行变换,而行坐标y不变。
1.单通道图像水平方向变换
#函数文件名为:SingleChannelShearX.m
#im为单通道图像像素矩阵
#delta为错切比例,delta>0表示向右错切,否则向左侧错切
#返回错切变换结果图像
function im = SingleChannelShearX( image, delta )
[ h, w ] = size( image );
w1 = floor( w + abs( delta * h ) )
im = uint8( zeros( h, w1 ) );%创建空的旋转图像矩阵,此处uint8是必须的
for i = 1 : h
for j = 1 : w
if delta > 0
im( h - i + 1, j + floor( delta * i ) ) = image( h - i + 1, j );
else
im( i, j + floor( -delta * i ) ) = image( i, j );
end
end
end
end
2.灰度图像或彩色图像水平方向错切变换
灰度图像直接调用前面的单通道图像变换函数即可。
彩色图像针对R、G、B分量分别调用单通道图变换函数即可。
#函数文件名为:ImageShearX.m
function im = ImageShearX( image, delta )
%把图像沿水平方向错切
imSize = size( image );
dim = numel( imSize ); %图像的维数
if( dim == 2 )%单通道图像,即灰度图像
im = SingleChannelShearX( image, delta );
else%彩色图像,即三通道图像
R = image( :, :, 1 );
G = image( :, :, 2 );
B = image( :, :, 3 );
imR = SingleChannelShearX( R, delta );
imG = SingleChannelShearX( G, delta );
imB = SingleChannelShearX( B, delta );
im = cat(3 ,imR, imG, imB );%将三个颜色分量合成彩色图像
end
end
3.测试函数ImageShearX的代码
clear all
clc
image = imread( '3.jpg' );
figure; imshow( image );
delta = 0.8;
im = ImageShearX( image, delta );
figure; imshow( im );
delta = -0.6;
im = ImageShearX( image, delta );
figure; imshow( im );
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)