Matlab图像水平方向错切变换的数学原理及实现

Matlab图像水平方向错切变换的数学原理及实现,第1张

一、引言

图像的几何变换在图像处理中被经常使用,其中图像错切变换也是常用的图像变换。图像错切错切变换包括水平方向错切变换和竖直方向错切变换,本文给出了灰度图像和彩色图像的水平方向错切变换的数学原理及matlab实现。
错切变换示意图如下图所示:

错切变换数学原理很简单,就是简单的矩阵乘法。本文给出了图像水平方向错切变换的Matlab详细实现过程(纯手工)。

二、数学原理及公式

假设变换之前的坐标为(x,y),变换之后的坐标为(x*, y*),则沿水平方向错切变换变换公式的矩阵形式为:

其中系数b是错切比例(其实就是斜率)。
展开之后就是:

由此可以看出水平方向的错切变换就是针对列坐标x进行变换,而行坐标y不变。

三、Matlab手工实现图像水平方向错切变换

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 );

运行结果:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/2990180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存