/align

Primary LanguageC++

实验用的仓库,用来瞎玩尝试提取蜂窝煤的位置

识别蜂窝煤位置

思路

先利用蓝色的模块与后背板来提取ROI,再结合颜色与形态学处理分割出横杆,再用霍夫变换得到一堆线段,用KMeans分成两类,取平均得到两条直线的斜率与截距

  1. 由于背景干扰很多,但目标的蓝色特征很明显,所以采用粗提取ROI来减少干扰。然后放大ROI,便于处理。
  2. 由于有蓝色的后背板,识别模块本身很困难,所以改为识别两条横杆。采用形态学运算与图像相减分割出横杆。用霍夫变换提取直线。
  3. 霍夫变换提取的直线是比较多的,而且是线段,故先计算直线的k与b。
  4. 图中有两条杆,考虑到它们的b有显著差异,故按照b用KMeans把直线分成两类,再求平均最终得到横杆的斜率与截距
  5. 把两条直线的知识转回到原图中

思考

  • 通过把图像缩放到合适的大小有奇效,有助于减少形态学处理中核大小固定带来的影响。
  • 背景光照影响一个好的颜色阈值的选取,可能要做图像重建
  • 考虑在ROI过小时不执行横杆分离(误差太大,没有意义,靠近一点)

问题

  • 自适应的颜色阈值参数(难,考虑图像重建技术)
  • 自适应的霍夫变换参数(考虑按比例配置参数,图像缩放可能解决了这个问题)
  • 如何把知识还原到原图中
  • 横杆提取会不会提取到上方干扰的横杆
  • 横杆不是近似水平的情况下,形态学提取可能无效
  • 数值安全(斜率为0)
  • 应对异常情况(得不到直线)
  • 运动模糊(可能会采用光学防抖)
  • 鱼眼镜头(采用某些专用镜头校正即可)
  • 调整角度的问题(如何从横杆中了解到角度问题)
  • 仿真怎么做

进度

目前最优的是trackbar5.cpp的方案,实现了基本思路。

12-22a/12-22w,在光照理想的情况下直接提取无背板的模块轮廓,表现非常好。 详见note12-22.md

12-17试图用前后面积差拒绝异常的提取,详见note12-17.md