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

如何获取分割图像中矩形船舶的纵向对称线像素?

提取矩形船舶纵向对称线的可行思路

方法1:基于目标区域的重心计算

你的数据集是二值分割图,白色(像素值1)区域为矩形船舶,直接计算所有船舶像素的x坐标均值,这个均值对应的竖线就是纵向对称线:

  • 遍历图像,收集所有像素值为1的点的(x,y)坐标
  • 计算所有x坐标的平均值x_mean,纵向对称线即为x = x_mean这条竖线
  • 代码示例(OpenCV+NumPy):
import cv2
import numpy as np

mask = cv2.imread('ship_mask.png', 0)  # 读取二值分割图
# 获取所有船舶像素的坐标
y_coords, x_coords = np.where(mask == 1)
if len(x_coords) > 0:
    x_mean = np.mean(x_coords)
    symmetry_line_x = int(round(x_mean))

若之前用均值方法失败,大概率是误取了轮廓边缘像素而非所有目标区域像素,后者的均值才是更准确的重心位置。

方法2:基于垂直投影的峰值检测

垂直投影统计每一列的白色像素数量,矩形船舶的投影曲线呈中间高、两侧低的对称形态,峰值对应的列即为对称线:

  • 生成垂直投影数组:proj = np.sum(mask, axis=0),proj[i]代表第i列的白色像素总数
  • 若存在噪声导致投影多峰值,可先用高斯滤波平滑曲线,再取峰值索引
  • 代码示例:
proj = np.sum(mask, axis=0)
# 平滑投影曲线
smoothed_proj = cv2.GaussianBlur(proj.reshape(-1,1), (5,1), 0).flatten()
symmetry_line_x = np.argmax(smoothed_proj)

方法3:基于最小外接矩形的对称轴

利用矩形的几何特性,先获取船舶的最小外接矩形,其垂直中线即为纵向对称线:

  • 提取图像轮廓时,筛选面积最大的轮廓(避免噪声小轮廓干扰)
  • 用cv2.minAreaRect获取矩形的中心坐标,中心x值就是对称线的x坐标
  • 代码示例:
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 取面积最大的轮廓作为船舶主体
max_contour = max(contours, key=cv2.contourArea)
rect = cv2.minAreaRect(max_contour)
center_x, _ = rect[0]
symmetry_line_x = int(round(center_x))

关键预处理建议

若分割图存在零星噪声像素,先通过形态学开运算(cv2.morphologyEx)去除噪声,避免干扰坐标计算;计算后可拿样本图像与手动标注的蓝色线对比,调整平滑窗口、轮廓筛选等参数优化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:22:11