我目前正在做一个基于本文所述方法的项目: Camera calibration from a single night sky image
作为计算机视觉的初学者,我不太明白如何实现论文中使用的方法来找到图像中所有亮点(灯具)的中心,特别是4.1节中的段落: / p>
大小为15×15像素的周围斑块(图1(a)),由给定因子(图1(c))上采样,并计算相应的梯度图(图1(d))。从最亮区域开始,降低灰度值阈值,直到能量函数最大化。能量函数定义为边界梯度的总和,并通过边界长度标准化(图1(e))。这导致图1(f)中所示的分段星形图像。分割确保加权重心算法[11]给出稳健的估计。
根据我的理解,我认为我可以对上采样图像执行拉普拉斯/索贝尔梯度函数,但之后我不太确定如何执行能量函数部分并生成分割图像。另外我还想了解如何使用openCV或其他python库实现加权重心算法来找到亮点的中心。
非常感谢,如果你们中的任何人能为此提供一些启示。
谢谢和问候。
答案 0 :(得分:4)
要带走的主要内容是energy function
在此上下文中使用任何函数,用于最大化问题。这里,能量函数是梯度/导数/差异的总和(即在这种情况下“检测到的边界可能性”)。
由于您似乎有非算法背景,我建议您阅读breadth-first search(请记住,图像是一种非常特殊的图形,其中每个边都是一个像素,连接到相邻的图像), recursion和floodfill。
grad_img
= max_per_pixel(sobel_horiz,sobel_vert)。seed
。region
的1x1 seed
开始。继续向region
添加相邻像素(建议使用广度优先遍历)。通过grad_img
中像素值的总和以及region
的边框的像素坐标来计算能量。如果能量高于前一次迭代的能量,则新像素将添加到region
。如果不是,则拒绝该像素。我的解决方案与他们的解决方案略有不同。它们实际上运行填充算法,填充所有像素的亮度[阈值; 255],计算能量函数,降低阈值,冲洗和重复,在最大化能量函数时停止。请注意,他们的算法非常低效,因为与我的提案中的1次填充相比,每个预先检测到的恒星有效地进行了多达255次的填充,这可能是实际中的性能问题。