You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于曲率从OpenCV轮廓提取非阴影地球边缘点的技术问询

提取月球拍摄地球照片的亮部边缘轮廓问题

我正在处理一张从月球拍摄的地球照片:
地球照片

我的需求是获取地球未处于阴影中边缘的contour点(即构成椭球的区域),要保留地球球体边缘的物理点,同时尽量避免使用高斯模糊防止数据丢失。

我编写的轮廓生成代码如下:

import numpy as np
import cv2 as cv

# 读取图像并转为灰度图
image_path = r"moon_check.png"
im = cv.imread(image_path)
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)

# 阈值处理后查找轮廓
ret, thresh = cv.threshold(imgray, 0, 1, cv.THRESH_BINARY + cv.THRESH_OTSU)
contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL , cv.CHAIN_APPROX_NONE)
contours = sorted(contours, key=cv.contourArea, reverse=True)
test = im
cnt = contours[0]

生成的轮廓效果较好:
叠加轮廓后的地球图像

但需要精简轮廓元素,排除晨昏线下方的阴影区域,仅保留顶部的曲线部分。目前尝试过以下方法但效果不佳:

  • 手动曲率采样有一定效果,但找不到合适的二阶导数检测方法,只能靠大量手动调参排除底部区域。
  • OpenCV的minEnclosingCircle拟合效果差,可能是地球的扁球体特性导致。从拟合结果筛选最近点的方式不够简洁,迭代筛选效率也不高。
  • OpenCV的霍夫圆检测在灰度图上效果不好,可能是没对图像做模糊处理,但又不想模糊丢失数据。
  • 阴影轮廓导致Kasa或Coope等经典圆拟合方法无法正常工作。
  • 凸匹配对大部分区域有效,但底部很多元素也具有凸性。

可探索的方法及优化方向

一、优化初始轮廓提取逻辑

当前全局阈值+OTSU的方式容易把阴影区域误判为前景,可尝试以下调整:

  • 基于颜色通道的阈值筛选:地球亮部在RGB的蓝绿通道亮度更高,阴影区域灰度值显著偏低。可以转成HLS色彩空间提取亮度(L)通道,或者直接用B/G通道做阈值,针对性保留亮部区域,减少阴影干扰。
  • 局部自适应阈值:用cv.adaptiveThreshold替代全局阈值,设置合适的块大小(比如15x15)和C值,让算法根据局部区域亮度调整阈值,更精准区分亮部边缘和阴影。
  • Canny边缘检测+轮廓提取:先对灰度图做Canny边缘检测(高低阈值可设为50和150左右,无需高斯模糊),再从边缘图中提取轮廓。Canny能更好地保留真实边缘,过滤阴影区域的伪边缘。

二、对现有轮廓点做针对性筛选

既然已经得到完整轮廓,可通过几何或亮度特征过滤阴影点:

  • 椭圆拟合筛选:用cv.fitEllipse对完整轮廓做椭圆拟合(适配地球扁球体特性),得到椭圆参数后,计算每个轮廓点到椭圆边缘的距离,保留距离在阈值内的点——亮部边缘会更贴近椭圆,阴影点会明显偏离,以此过滤底部区域。
  • 斜率突变检测:先找到轮廓的最高点(y值最小的点),遍历轮廓时计算相邻点的斜率变化。亮部边缘斜率变化平滑,晨昏线附近斜率会出现突变,设置阈值停止保留突变后的点即可。
  • 邻域亮度验证:对每个轮廓点,取周围3x3或5x5邻域的平均灰度,只保留邻域亮度高于阈值的点。阴影区域的点周围亮度低,亮部边缘点周围亮度高,可直接过滤阴影点。

三、形态学操作辅助去噪

在阈值处理后,用cv.morphologyEx做开运算(先腐蚀后膨胀),选择小尺寸的结构元素(比如3x3矩形核),可以去掉阴影区域的小伪轮廓或毛刺,同时不破坏亮部的完整边缘,再提取轮廓能减少后续筛选压力。

四、语义分割(批量场景可选)

如果上述方法都达不到预期,且需要批量处理这类图像,可以用简单的语义分割模型(比如U-Net),标注少量亮部/阴影样本训练模型,直接分割出亮部区域后再提取轮廓,精度更高但需要一定的建模成本。


内容的提问来源于stack exchange,提问作者ConcernedAboutOwls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:45:57