MATLAB图像平移无效果求助:代码执行后图像未移动
问题根源:仿射平移矩阵的结构写错啦!
嘿,这问题我太熟了——你把affine2d要求的平移矩阵结构搞反了,这才导致图像完全没移动!
先划重点:MATLAB中2D平移的正确仿射矩阵
MATLAB的affine2d接受的齐次变换矩阵,平移分量是放在**第一行第三列(tx)和第二行第三列(ty)**的位置,标准结构是:
[1 0 tx] % tx是x方向平移量 [0 1 ty] % ty是y方向平移量 [0 0 1] % 固定的第三行,绝对不能改!
你之前写的矩阵[1 0 0; 0 1 0; x y 1]完全不符合这个规则,这个矩阵等价于单位矩阵(因为第三行的x、y不会参与平移计算,imwarp会把这种不符合规范的矩阵当成无变换处理),所以输出图和原图完全一致,isequal自然返回1。
修正后的代码
把矩阵改成正确结构就搞定了:
myPic = imread('pic.jpg'); x = 250; % x方向平移像素数 y = 375; % y方向平移像素数 % 正确的平移仿射变换矩阵 trans = affine2d([1 0 x; 0 1 y; 0 0 1]); outputPic = imwarp(myPic, trans); imshow(myPic) axis on figure() imshow(outputPic) axis on isequal(myPic,outputPic) % 现在会返回0,说明图像已经平移了!
为啥旋转有效?
因为你写旋转矩阵的时候结构是对的(比如旋转θ的矩阵是[cosθ -sinθ 0; sinθ cosθ 0; 0 0 1]),符合affine2d的要求,所以imwarp能正确执行旋转操作。
内容的提问来源于stack exchange,提问作者user311302
相关产品推荐
相关产品推荐

