[英]Affine transformation of with Python
從 MATLAB 翻譯我的代碼我正在嘗試使用 Python 3 對 TERRA-ASTER 衛星圖像進行仿射變換,
import numpy as np
import matplotlib.pyplot as plt
from skimage import transform as tf
from skimage import io, exposure
naivasha_rgb = io.imread('naivasha.tif')
使用來自四個場景角的坐標對 (src,dst) 的變換矩陣。
# upper left
# lower left
# upper right
# lower right
movingpoints = np.array([
[36.214332,-0.319922],
[36.096003,-0.878267],
[36.770406,-0.400443],
[36.652213,-0.958743]])
fixedpoints = np.array([
[0,0],
[0,4200],
[4100,0],
[4100,4200]])
使用 Skimage package 的功能
tform = tf.estimate_transform('affine',movingpoints,fixedpoints)
newnaivasha_rgb = tf.warp(naivasha_rgb,tform.inverse)
tform 與 MATLAB 中的相同,但已轉置,但翹曲會創建平面綠色圖像,而不是 MATLAB 中的預期圖像(請參閱下面的 WeTransfer 鏈接)。
newnaivasha_rgb = exposure.rescale_intensity(newnaivasha_rgb,
out_range='uint8')
plt.figure()
io.imshow(newnaivasha_rgb)
plt.axis('off')
plt.show()
有任何想法嗎? 根據我搜索的解決方案,數值表示低對比度或沒有圖像,具體取決於我使用 tform 還是 tform.inverse 和 tf.warp。
從WeTransfer下載圖像 (50 MB),包括輸入圖像 naivasha.tif 和 output 圖像 naivasha_georef_python.png 和 naivasha_georef_matlab.jpg。
感謝 rickhg12hs 的建議,我現在能夠解決問題。 我將經度和緯度值轉換為相對於圖像的像素坐標,然后仿射變換產生預期的結果。 謝謝rickhg12hs!
import numpy as np
import matplotlib.pyplot as plt
from skimage import transform as tf
from skimage import io
#%%
naivasha_rgb = io.imread('naivasha.tif')
#%%
plt.figure()
io.imshow(naivasha_rgb)
plt.axis('off')
plt.show()
#%%
UL = [-0.319922,36.214332]
LL = [-0.878267,36.096003]
UR = [-0.400443,36.770406]
LR = [-0.958743,36.652213]
#%%
# 4200 rows correspond to the latitudes [1]
# 4100 cols correspond to the longitudes [0]
movingpoints = np.array([
[0.,4100.*(UL[1]-LL[1])/(UR[1]-LL[1])],
[4200.*(UL[0]-LL[0])/(UL[0]-LR[0]),0.],
[4200.*(UL[0]-UR[0])/(UL[0]-LR[0]),4100.],
[4200.,4100.*(LR[1]-LL[1])/(UR[1]-LL[1])]])
#%%
fixedpoints = np.array([
[0.,0.],
[4200.,0.],
[0.,4100.],
[4200.,4100.]])
#%%
fixedpoints = np.fliplr(fixedpoints)
movingpoints = np.fliplr(movingpoints)
#%%
tform = tf.estimate_transform('affine',movingpoints,fixedpoints)
#%%
newnaivasha_rgb = tf.warp(naivasha_rgb,tform)
#%%
plt.figure()
plt.imshow(np.flipud(newnaivasha_rgb),
extent=[36.096003,36.770406,-0.319922,-0.958743])
ax=plt.gca()
ax.invert_yaxis()
plt.savefig('newnaivasha_rgb.png')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.