gpt4 book ai didi

python - OpenCV/图像处理技术,用于查找图像中亮点的中心

转载 作者:太空狗 更新时间:2023-10-30 01:14:23 25 4
gpt4 key购买 nike

我目前正在根据本文中描述的方法做一个项目: 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 image after gradient function applied after energy-function applied segmented image

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

如果你们中的任何人能提供一些关于此的信息,我们将不胜感激。

感谢和问候。

最佳答案

要删除的主要内容是在此上下文中使用的能量函数是用于最大化问题的任何函数。在这里,能量函数是梯度/导数/差异的总和(即在这种情况下为“检测到的边界可能性”)。

因为你似乎没有算法背景,我建议你继续阅读 breadth-first search (记住图像是一种非常特殊的图形,其中每条边都是一个像素,连接到相邻的像素),recursion , 和 floodfill .

  1. 放大/缩小图像
  2. 运行水平和垂直 Sobel 滤波器。将生成的图像组合成 grad_img = max_per_pixel(sobel_horiz,sobel_vert)。
  3. 对于每个 15x15 像素 block ,找到最亮点。这是星星的种子
  4. 从包含 种子 的 1x1 region 开始。继续向该 region 添加相邻像素(推荐广度优先遍历)。通过 grad_img 中像素值的总和计算能量,像素坐标为 region边界。如果能量高于前一次迭代的能量,则将新像素添加到 region。否则,该像素将被拒绝。
  5. 找到闭合轮廓或像素集合的重心并不是一项艰巨的任务。要么通过它的数学定义(所有区域内像素的 x 和 y 坐标的总和,除以面积),要么通过使用图像力矩(cv::moments example)。

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

关于python - OpenCV/图像处理技术,用于查找图像中亮点的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30937666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com