利用OpenCV/图像处理技术寻找imag中的亮点中心

2024-05-15 07:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在进行一个基于本文所述方法的项目: Camera calibration from a single night sky image

作为一个计算机视觉的初学者,我不太明白如何实现本文中所用的方法来寻找图像中所有亮点(亮度)的中心,尤其是第4.1节:

The surrounding patch of size 15 × 15 pixels (Figure 1(a)), is upsampled by a given factor (Figure 1(c)) and the corresponding gradient map is calculated (Figure 1(d)). Starting from the brightest region, the gray value threshold is decreased, until an energy function is maximized. The energy function is defined as the sum of the border gradients and normalized by the border length (Figure 1(e)). This leads to a segmented star image shown in Figure 1(f). The segmentation ensures that the weighted centre of gravity algorithm [11] gives a robust estimation.

upsampled imageafter gradient function appliedafter energy-function applied segmented image

根据我的理解,我认为我可以对上采样图像做拉普拉斯/索贝尔梯度函数,但之后我不太确定如何执行能量函数部分并生成分割图像。另外,我还想了解如何使用openCV或其他python库实现加权重心算法来找到亮点的中心。在

非常感谢你们中的任何人能提供一些关于这个的灯。在

谢谢和问候。在


Tags: andofthe方法from图像image亮点
1条回答
网友
1楼 · 发布于 2024-05-15 07:55:49

主要要去掉的是energy function在这个上下文中使用的是任何用于最大化问题的函数。在这里,能量函数是梯度/导数/差异的总和(即本例中的“检测到的边界可能性”)。在

因为您似乎有非算法背景,我建议您阅读breadth-first search(记住图像是一种非常特殊的图形类型,其中每个边都是一个像素,与相邻的像素相连)、recursion和{a3}。在

  1. 放大/缩小图像
  2. 运行水平和垂直Sobel过滤器。将生成的图像组合成grad_img=max_/u像素(sobel_horiz,sobel_vert)。在
  3. 对于每个15x15像素的补丁,找到最亮的点。这是恒星的seed。在
  4. 从由seed组成的1x1region开始。继续将相邻像素添加到region(建议宽度优先遍历)。用grad_img中像素值的和计算能量,像素坐标是region的边界。如果能量高于上一次迭代的能量,则将新像素添加到region。否则,像素被拒绝。在
  5. 找到一个封闭轮廓或一组像素的重心并不是一项艰巨的任务。或者根据它的数学定义(区域内所有像素的x和y坐标之和除以面积),或者使用图像矩(cv::momentsexample)来完成。在

我的解决方案和他们的方案有点不同。他们实际上运行一个泛光填充算法,填充所有亮度像素[threshold;255],计算能量函数,降低阈值,冲洗并重复,当能量函数最大化时停止。请注意,他们的算法效率非常低,因为他们对每个预先探测到的恒星有效地进行了255次洪水填充,而我的建议中只有1次洪水填充,这在实践中可能是一个性能问题。在

相关问题 更多 >