我想计算平均发光值与到图像中心的距离。我正在考虑的方法是
要计算第一步,请使用以下功能:
dist_img = np.zeros(gray.shape, dtype=np.uint8)
for y in range(0, h):
for x in range(0, w):
cy = gray.shape[0]/2
cx = gray.shape[1]/2
dist = math.sqrt(((x-cx)**2)+((y-cy)**2))
dist_img[y,x] = dist
不幸的是,id给出的结果与我从此处计算出的结果不同
distance = math.sqrt(((1 - gray.shape[0]/2)**2 )+((1 - gray.shape[1]/2 )**2))
当我测试像素(1,1)时,我从第一个代码收到20,从第二个代码收到3605。 我希望您能提出有关如何纠正循环的建议,以及有关如何从其他观点入手的提示。或者也许还有其他方法可以实现我想要的目标。
答案 0 :(得分:0)
您正在使用dist_img
dtype设置np.uint8
。该8位无符号整数可以适合0到255之间的值,因此3605无法正确表示。对距离图像dtype使用更高的位深度,例如np.uint32
。
distance = math.sqrt(((1 - gray.shape[0]/2)**2 )+((1 - gray.shape[1]/2 )**2))
小心:gray.shape
将为您提供(高度,宽度)或(y,x)。其他代码正确地将gray.shape[0]/2
分配给y中心,该代码将其混合并使用x坐标的高度。
您的算法似乎足够好,我建议您坚持使用它。您可以通过将图像转换为极坐标空间(例如使用OpenCV linearToPolar)来实现与前两个步骤相似的操作,但这可能很难调试。