【发布时间】:2018-03-02 00:38:41
【问题描述】:
我想通过不使用库函数来实现仿射变换。 我有一个名为“transformed”的图像,我想应用逆变换来获得“img_org”图像。现在,我正在使用自己的基本 GetBilinearPixel 函数来设置强度值。但是,图像没有正确转换。这就是我想出的。 :
这是图片(“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 函数中的实现。
-
积分从何而来?
-
我认为矩阵是正确的。我希望“transformed.png”转换为“original.png”(转换-> 原始)。我计算的矩阵来自我共享的第一张和第三张图像。 pts2 代表第一张图像,pts1 代表第三张图像。我可以对图像进行矢量化,但我认为逻辑仍将保持不变。
-
是的,我正在寻找答案,但我认为这需要我一点时间。不过我很确定你的观点是错误的。
标签: python image opencv image-processing opencv3.0