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

低对比度16位灰度图像条纹提取及相邻条纹间距测算咨询

条纹提取与测量方案优化

核心需求

  • 从16位灰度样本中提取条纹特征,输出效果匹配预设参考结果
  • 后续完成两个测量需求:
    • 统计右侧条纹的总数量
    • 计算每根左侧条纹末端到相邻右侧条纹末端的距离

现有实现代码

import numpy as np
import cv2
from matplotlib import pyplot as plt

gray = cv2.imread('input_file.png',cv2.IMREAD_UNCHANGED)
sobelY = cv2.Sobel(gray, cv2.CV_32F, 0, 1, ksize=3)
sobelY2 = cv2.Sobel(sobelY, cv2.CV_32F, 0, 1, ksize=3)
sobelY2[sobelY2<0]=0
mask = np.where(sobelY2==0,0,1)

sobelY2 = cv2.normalize(sobelY2, dst=None, alpha=0, beta=65535, norm_type=cv2.NORM_MINMAX).astype(np.uint16)
clahe=cv2.createCLAHE(clipLimit=6, tileGridSize=(8,8))
sobelY2_clahe = clahe.apply(sobelY2)
sobelY2_clahe = clahe.apply(sobelY2_clahe)
result = np.where(mask!=0,sobelY2_clahe,0)
fig = plt.figure(figsize=(10, 10))
ax = plt.subplot(121)
plt.imshow(gray, cmap='gray')
ax = plt.subplot(122)
plt.imshow(result, cmap='gray')
plt.show()

现有逻辑说明

  • 图像读取:输入为16位灰度图,读取时保留原始格式避免精度损失
  • 特征提取:采用Y方向二阶Sobel算子突出条纹边缘特征
  • 对比度增强:连续两次使用CLAHE算法做局部对比度均衡
  • 背景过滤:生成掩码将背景像素值置为0
  • 现状:二阶Sobel输出已可呈现基础条纹特征,但与预期效果存在差距,需兼容更高难度的测试样本

优化方案

边缘提取环节优化

  • 边缘检测前先对原图做5x5高斯模糊,过滤背景噪声,减少后续误识别的细碎边缘
  • 可将二阶Sobel替换为cv2.Laplacian()算子,对竖直方向条纹的边缘响应更均匀,参数可调性更强
  • 增加非极大值抑制步骤,将加粗的条纹边缘细化为单像素宽度,降低后续末端定位和距离计算的误差

对比度处理环节优化

  • 取消两次连续CLAHE操作,仅保留单次CLAHE,将clipLimit下调至2~3,tileGridSize调整为(16,16),避免局部对比度过度增强引入噪声
  • 可替换CLAHE为灰度拉伸+自适应阈值分割组合,先将Sobel输出的灰度范围拉伸到0~65535,再用OTSU阈值过滤低响应的背景噪声,稳定性优于反复调用CLAHE

后处理环节优化

  • 拿到边缘图后,使用竖直方向的形态学核(如(7,1)矩形核)做开运算,过滤横向噪声点,保留连续的竖直条纹
  • 对二值化后的条纹做连通域分析,过滤面积小于设定阈值的小连通域,直接剔除误识别的噪点

测量环节优化

  • 条纹提取完成后,对图像右半区域做竖直方向像素投影,统计峰值数量即可得到右侧条纹总数
  • 对每根条纹逐列扫描得到上下端点坐标,直接计算相邻左右条纹端点的欧氏距离即可完成测量需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:08