上QQ阅读APP看书,第一时间看更新
4.4 图像转置
图像转置是将图像像素的x坐标和y坐标互换,如图4.6所示。图像的大小会随之改变——高度和宽度将互换。
图4.6 转置变换坐标图
4.4.1 图像转置的变换公式
转置变换的公式如下:
显然,转置矩阵的逆矩阵仍为其自身。故转置变换的逆变换具有相同的形式。
4.4.2 图像转置的实现
1.MATLAB编程实现
转置变换的实现程序如下。
% 图像转置 A=imread('girl.bmp'); tform = maketform('affine', [0 1 0;1 0 0; 0 0 1]); %定义转置变换矩阵 B = imtransform(A, tform, 'nearest'); subplot(1,2,1), imshow(A); title(’原图像’); subplot(1,2,2), imshow(B); title(’图像转置’);
转置结果如图4.7所示。
图4.7 转置效果图
2.Visual C++实现
利用Visual C++实现图像转置变换的程序如下。
/******************* void CImgProcess::Transpose(CImgProcess * pTo) 功能: 图像的转置 注: 图像水平竖直方向互换,图像大小不变 参数: CImgProcess * pTo:处理后得到的图像的CImgProcess指针 返回值: 无 *******************/ void CImgProcess::Transpose(CImgProcess* pTo) { int nHeight = pTo->GetHeight(); int nWidth = pTo->GetWidthPixel(); int i, j; for(i=0; i<nWidth; i++) { for(j=0; j<nHeight; j++) { if(j<nWidth && i<nHeight) pTo->SetPixel(i, j, GetPixel(j, i)); else pTo->SetPixel(i, j, RGB(255,255,255)); }//for j }//for i }
Transpose()函数的调用方式如下所示。
// 调用Transpose()函数实现图像的转置 imgInput.Transpose(&imgOutput); // 将结果返回给文档类 pDoc->m_Image = imgOutput;
读者可以通过示例程序DIPDemo中的菜单命令“几何变换→图像转置”来观察处理效果。
在学习了4.6节图像旋转之后,有兴趣的读者也可尝试通过先水平镜像,再逆时针旋转90°的方式来实现图像转置。