ライブラリ関数を使用しないでアフィン変換を実装したいと考えています。 私は "transformed"という名前の画像を持っています。逆変換を適用して "img_org"画像を取得したいと思います。今、私は自分の基本的なGetBilinearPixel関数を使って強度値を設定しています。しかし、イメージは正しく変換されていません。これが私が思いついたものです。 :PythonでwarpAffineのコードを手動で配線する
これは画像( "transformed.png")である:これはイメージ( "img_org.png")である
:
ここで変換行列を確認できます:
pts1 = np.float32([[693,349] , [605,331] , [445,59]])
pts2 = np.float32 ([[1379,895] , [1213,970] ,[684,428]])
Mat = cv2.getAffineTransform(pts2,pts1)
B=Mat
コード:
img_org=np.zeros(shape=(780,1050))
img_size=np.zeros(shape=(780,1050))
def GetBilinearPixel(imArr, posX, posY):
return imArr[posX][posY]
for i in range(1,img.shape[0]-1):
for j in range(1,img.shape[1]-1):
pos=np.array([[i],[j],[1]],np.float32)
#print pos
pos=np.matmul(B,pos)
r=int(pos[0][0])
c=int(pos[1][0])
#print r,c
if(c<=1024 and r<=768 and c>=0 and r>=0):
img_size[r][c]=img_size[r][c]+1
img_org[r][c] += GetBilinearPixel(img, i, j)
for i in range(0,img_org.shape[0]):
for j in range(0,img_org.shape[1]):
if(img_size[i][j]>0):
img_org[i][j] = img_org[i][j]/img_size[i][j]
は私のロジックが間違っていますか?私は非常に非効率なアルゴリズムを適用したことを知っています。 私には洞察力がありますか? 他にもうまく動作するアルゴリズムを教えてください。
(リクエスト)。私はwarpAffine関数を使用したくありません。
warpAffine()を使用したくない特別な理由はありますか? –
はい、私は大学の助手です。私は、学生にwarpAffine関数内の実装を理解させるための課題を与えるための独自のライブラリを作成しています。 –
ポイントはどこから来たのですか? –