我有一张扭曲的图片,a点、B点、C点和D点不失真地形成一个1厘米×1厘米的正方形。在
我试着用单纯形法来纠正它,但是它扭曲了AD和BC这两条线,你可以在图中看到。在
你知道我该怎么纠正吗?在
非常感谢!在
玛丽-编码器初学者
注:为了提供信息,图像是在一个有大视场的内窥镜摄像机的管子里拍摄的,这样可以在摄像机周围拍摄到管子的照片。我将使用1*1厘米的正方形来估计根的生长,并随时间推移拍摄几张照片。在
这是我的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__' :
# Read source image.
im_src = cv2.imread('points2.jpg', cv2.IMREAD_COLOR)
# Four points of the miniR image
pts_src = np.array([[742,223],[806,255],[818,507],[753,517]], dtype=float)
# Read destination image.
im_dst = cv2.imread('rectangle.jpg', cv2.IMREAD_COLOR)
# Four points of the square
pts_dst = np.array([[200,200],[1000,200],[1000,1000],[200,1000]], dtype=float)
# Calculate Homography
h, status = cv2.findHomography(pts_src, pts_dst)
# Warp source image to destination based on homography
im_out = cv2.warpPerspective(im_src, h, (im_dst.shape[1],im_dst.shape[0]))
cv2.imwrite('corrected2.jpg', im_out)
# Display images
cv2.imshow("Source Image", im_src)
cv2.imshow("Destination Image", im_dst)
cv2.imshow("Warped Source Image", im_out)
cv2.waitKey(0)
我用GDAL找到了一个解决方案。我们可以使用两个棋盘图像。其中一幅图像是用产生失真的设备成像的,并且保持不变,所以没有失真。在QGIS的帮助下,您可以创建一个文件,将扭曲的点与未扭曲的点关联起来。为此,您可以使用定义的网格间隔(例如100px)在每个交叉点添加一个地面控制点,并将生成的gcp导出为
pointsfile.points
。在之后,您可以使用协作者创建的批处理文件here。它正在使用GDAL对图像进行地理校正。在
您只需要将要转换的图像(jpg格式)放入repo的根目录并运行bash翘曲.sh。这将把重新转换的图像输出到out/目录中。在
单应性是一种射影变换。因此,它只能将直线映射为直线。输入曲线四边形的直边已正确校正,但无法使用投影变换拉直曲线边。在
在你发布的照片中,可以合理地假设整体几何体近似于一个圆柱体,“垂直”线平行于圆柱体的轴线。所以它们是近似直线的,一个投影变换(相机投影)将它们映射成直线。“水平”线是圆的图像,如果圆柱体被挤压,则为椭圆。投影变换将把椭圆(特别是圆)映射为椭圆。所以你可以通过拟合椭圆来继续。有关提示,请参见this other answer。在
相关问题 更多 >
编程相关推荐