【问题标题】:Remove the spikes/triangles on a image删除图像上的尖峰/三角形
【发布时间】:2021-10-16 08:19:19
【问题描述】:

我有一个轮廓边框上有尖刺/小三角形的图像,如下所示:

我想删除不需要的尖峰/小三角形:

并像这样输出图像:

我使用 OpenCV/Emgu CV 在网上搜索了很多帖子,但没有运气。 问题是轮廓不等间距,我无法使用任何查找峰值功能来查找和删除它们。

我也使用三次样条来平滑图像,但它只是破坏了原始图像形状(太平滑)或者只是对尖峰产生了一点影响。

任何有想法的人可以帮助我解决这个问题吗?

【问题讨论】:

  • 你尝试过形态闭合吗?
  • 注意,您需要非常明确什么是尖峰,什么不是尖峰。算法无法猜测您的想法,并且“但很明显”无法在程序中编码。你能提供一个明确的尖峰定义吗?
  • @Cris Luengo,我一直在尝试,但它只是去掉了细线,形状更平滑。
  • @Yves Daoust,我完全理解您的评论,这就是为什么这对我来说非常困难。事实上,我应该调用形状上不需要的小三角形。在我的实际练习案例中,小三角形位于对象的固定位置。但是有一个很大的问题导致我很难将它们删除。一是物体的方向可以在一定的角度范围内变化(例如+/-15度),这使得轮廓点具有不同的分布和起点。
  • “关于物体的固定位置”:这怎么可能?你的意思是对象总是一样的吗??

标签: opencv image-processing emgucv contour


【解决方案1】:

也许这就是你想要的(它根本不准确)

OpenCV + Python

# Import preprocessors
import os
import cv2
import numpy as np

# Read image
dir = os.path.abspath(os.path.dirname(__file__))
im = cv2.imread(dir+'/im.png')

# Remove triangles
kernel = np.ones((5,5), np.uint8)
factor=11
im = cv2.dilate(im, kernel, iterations=factor)
im = cv2.erode(im, kernel, iterations=factor)

# Save the processed image
cv2.imwrite(dir+'/spike_res.png', im)


更新:

可能与 OpenCV 标签无关;但是对于 .NET,您还可以使用 ErosionDialation of AForge

【讨论】:

  • 感谢 Shamshirsaz。我正在使用 .Net C#,我应该检查 C# 是否有 numpy。
  • 不客气 :) 我认为您也可以将 AForge 用于 C# @HsiehJeremy
【解决方案2】:

这样的事情也会有所帮助。

地点:

  • @contours 是 findContrours() 之后的轮廓列表

  • @idx 是轮廓的索引

  • @eps 调节轮廓的近似程度。

                 cv::Mat approx;
                 double eps = cv::arcLength(contours[idx], true) * 0.05;
                 cv::approxPolyDP(contours[idx], approx, eps, true);
                 approx.copyTo(contours[idx]);
    

【讨论】:

    【解决方案3】:

    正如 Cris 所建议的,形态闭合是一个很好的起点。

    在下图中,我用一个 49x49 的八角核(圆形会更好)进行关闭,并与原来的不同。

    如果您按大小(也可能按形状)过滤掉斑点,您将获得可以减去的真实尖峰。形状的其余部分保持不变。

    【讨论】:

    • 感谢 Yves。我觉得这对我来说是很好的尝试。根据我之前的评论,我很抱歉我不擅长使用形态关闭。如果您可以与我分享您的示例代码,那将非常有帮助,但我认为我仍然可以自己尝试。满足!
    • @HsiehJeremy:“我不擅长使用形态闭合”,你是什么意思,这只是两个函数调用?
    • 我已经得到了它的工作方式,如上所示。 ^^
    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多