这是我previous question的延续。我现在有这样的图像
这里检测到角落。现在我正在尝试估计较大盒子的尺寸,同时知道较小的黑盒子尺寸。
任何人都可以指导我估算盒子尺寸的最佳方法是什么?我可以用简单的欧几里德距离来做,但我不知道它是否是正确的方法。或者即使它是正确的方式,然后从元组列表(坐标)我如何找到像A-B或A-D或G-H的距离,但不能像A-C或A-F那样?
必须保留序列才能获得正确的尺寸。此外我还有两个方框,所以当我创建角点坐标列表时,它应该包含A-J的所有坐标,而且我不知道哪个坐标属于哪个方框。那么我怎么能保留两个不同的盒子,因为我想运行这个代码来获得更多类似的图像。
注意:此图像中的角不是单个点而是一组点,因此我将角集合并对其进行平均以获得每个角的单个(x,y)坐标。
我尽力解释我的问题。得到一些答案会非常高兴:)谢谢。
答案 0 :(得分:1)
对于
如何找到A-B或A-D或G-H之类的距离,但不能像A-C或A-C那样 A-F
部分
这是一个快速代码,对于有很多角落的图像效率不高,但对于你的情况,它没问题。我们的想法是从你在另一个问题中得到的扩张边缘图像开始(只有大盒子,但对于那个也有小盒子的图像,想法是一样的)
然后对于每个可能的角落组合,你会看到它们之间的假想线上的几个点,然后检查这些点是否实际落在图像中的实线上。
import cv2
import numpy as np
#getting intermediate points on the line between point1 and point2
#for example, calling this function with (p1,p2,3) will return the point
#on the line between p1 and p2, at 1/3 distance from p2
def get_intermediate_point(p1,p2,ratio):
return [p1[0]+(p2[0]-p1[0])/ratio,p1[1]+(p2[1]-p1[1])/ratio]
#open dilated edge images
img=cv2.imread(dilated_edges,0)
#corners you got from your segmentation and other question
corners=[[29,94],[102,21],[184,52],[183,547],[101,576],[27,509]]
nb_corners=len(corners)
#intermediate points between corners you are going to test
ratios=[2,4,6,8] #in this example, the middle point, the quarter point, etc
nb_ratios=len(ratios)
#list which will contain all connected corners
connected_corners=[]
#double loop for going through all possible corners
for i in range(nb_corners-1):
for j in range(i+1,nb_corners):
cpt=0
c1=corners[i]; c2=corners[j]
#testing every intermediate points between the selected corners
for ratio in ratios:
p=get_intermediate_point(c1,c2,ratio)
#checking if these points fall on a white pixel in the image
if img[p[0],p[1]]==255:
cpt+=1
#if enough of the intermediate points fall on a white pixel
if cpt>=int(nb_ratios*0.75):
#then we assume that the 2 corners are indeed connected by a line
connected_corners.append([i,j])
print(connected_corners)
答案 1 :(得分:0)
一般情况下,你不能,因为任何重建都只是规模化。
基本上,给定校准相机和6个2D点(6x2 = 12),您需要找到6个3D点+比例= 6x3 + 1 = 19。方程式不够。
为了做到这一点,你必须做出一些假设并将它们插入方程式中。
表单示例:
希望这些约束足以让您减少未知的方程式,并且可以求解线性方程组。