這里先說一下我們的目的,最近在用Pix2Pix 做一個項目的時候,遇到了成對圖像質量差,存在着特征不能對齊的問題,即A圖與B圖是一組成對圖像,我們想要將A 圖中的物體轉化為B 圖中的物體,但這個物體在A 圖與B 圖中的坐標位置相差較大。
為了解決這一問題,我們使用圖像仿射變換技術來解決這個問題,仿射變換的原理網上一搜就有一大把,這里不做介紹,這里只給出代碼實現。
img_x = "./1.png";
img_y = "./2.png";
x = imread(img_x); % 讀取圖像x
y = imread(img_y); % 讀取圖像y
figure;
subplot(1, 2, 1); imshow(x); % 顯示圖像x
subplot(1, 2, 2); imshow(y); % 顯示圖像y
set(gcf, "outerposition", get(0, "screensize")); % 將圖像全螢幕顯示
[x0,y0] = ginput(3); % 通過鼠標點擊三次取得三個坐標點
[x1,y1] = ginput(3); % 通過鼠標點擊三次取得目標圖中對應的三個坐標點
close all; % 關閉圖像顯示
in_points = [x0,y0];
out_points = [x1,y1];
tform2 = maketform('affine', in_points, out_points); % 計算變換矩陣
T = affine2d(tform2.tdata.T); % 將變換矩陣轉化為仿射變換矩陣類型
z = imwarp(x,T,'OutputView',imref2d(size(y))); % 進行仿射變換
img_result = "./3.png";
imwrite(z, img_result); % 存儲結果
效果圖如下: