圖像水平鏡像變換

圖像水平鏡像變換

圖像鏡像分為水平鏡像、垂直鏡像和對角鏡像 3 種。其中,水平鏡像是指將圖像的左右部分以圖像垂直中軸線為中心進行鏡像對換。深度學習的訓練過程中,常常使用圖像水平鏡像變換的圖像增強方法以提高模型的泛化能力。

基本介紹

  • 中文名:圖像水平鏡像變換
  • 外文名:Image horizontal mirror transformation
  • 基本釋義:以圖像垂直中軸線為中心鏡像對換
  • 性質:尺寸不變
  • 學科:數字圖像處理
  • 套用:機器學習的數據增強
基本定義,變換方法,代碼實現,C++,Matlab,

基本定義

圖像鏡像分為水平鏡像、垂直鏡像和對角鏡像 3 種:
(1)水平鏡像是指將圖像的左右部分以圖像垂直中軸線為中心進行鏡像對換;
(2)垂直鏡像是將圖像的上下兩部分以圖像水平中軸線為中心進行鏡像對換;
(3)對角鏡像是將圖像以圖像水平中軸線和垂直中軸線的交點為中心進行鏡像對換,相當於將圖像先後進行水平鏡像和垂直鏡像。
圖1為原Lena圖像,經水平鏡像變換後,為圖2所示。
圖1 原Lena圖像圖1 原Lena圖像
圖2 原Lena圖像的水平鏡像圖2 原Lena圖像的水平鏡像

變換方法

假設原圖像的高度為
,寬度為
,經過水平鏡像變換後,原圖像中像素點
的像素變為新圖像坐標
處的像素值。若用
表示原圖像坐標,
表示經水平鏡像變換後圖像的坐標,那么兩張圖像的關係可表示為:
逆變換為:

代碼實現

C++

void Mirror(const Mat &srcImage, Mat &dstImage, int flag){dstImage.create(srcImage.size(), srcImage.type());int nRowNum = srcImage.rows;int nColNum = srcImage.cols;switch(flag){//水平鏡像case 1:for(int i = 0; i < nRowNum; i++){for(int j = 0; j < nColNum; j++){dstImage.at<Vec3b>(i, j) = srcImage.at<Vec3b>(nRowNum - i - 1, j);}}break;//垂直鏡像case 2:for(int i = 0; i < nRowNum; i++){for(int j = 0; j < nColNum; j++){dstImage.at<Vec3b>(i, j) = srcImage.at<Vec3b>(i, nColNum - j - 1);}}break;//對角鏡像case 3:for(int i = 0; i < nRowNum; i++){for(int j = 0; j < nColNum; j++){dstImage.at<Vec3b>(i, j) = srcImage.at<Vec3b>(nRowNum - i - 1, nColNum - j - 1);}}}}

Matlab

clc;clear all;close all;I=imread('lena.jpg');figure;imshow(I);%水平變換[m n]=size(I);I1(1:m,1:n)=I(m:-1:1,1:n);figure;imshow(I1);%%%垂直變換I2(1:m,1:n)=I(1:m,n:-1:1);figure;imshow(I2);%%%對角變換I3(1:m,1:n)=I(m:-1:1,1:n);figure;imshow(I3)

相關詞條

熱門詞條

聯絡我們