【问题标题】:Xcode, iOS - Image line/shape recognitionXcode, iOS - 图像线条/形状识别
【发布时间】:2012-09-02 18:00:58
【问题描述】:

我想在我的UIImageView(或UIImage)中识别正方形/矩形。

我查看了“Very simple image recognition on iOS”,但这并不是我想要的。

目前我有一个UIImageView,它不时会收到一个UIImage

大部分UIImagees 都有这样的黑色正方形/矩形: 。 但边角可能(也可能没有)圆角。

如何识别第一个黑色正方形/矩形的大小? 最终结果是调整我的UIImageView 的大小,使UIImage 中的第一个黑色方块填满屏幕。像这样:

【问题讨论】:

  • 您能说明一下您将在实践中使用的图像类别吗?你真的会一直使用黑色轮廓框,其他所有东西都是白色的,还是会是,比如说,带有任意内容的框,被白色的黑色边框包围,或者再次使用其他东西?
  • “正方形”你真的是指“矩形”吗?请澄清...
  • 制作漫画阅读器?您可能需要进行一些模式识别,但如果您只是在寻找这样的分隔线,那应该不会太糟糕。
  • “正方形”可能有圆形边缘,并用颜色填充。正方形/矩形的大小也可能不同。
  • @AleksanderAzizi - 在这种情况下,您可能应该使用一些说明各种情况的示例图像来更新问题。我的回答不适用于框内具有颜色和其他特征的带边框图像,但我假设您想要检测形状,就像您在问题中遇到的一样。圆角也会出现问题,但根据圆角半径,您可以先缩小图像,然后对已有效去除半径的较小图像进行角检测。

标签: ios image-processing uiimageview uiimage


【解决方案1】:

如果您的图像在水平行中始终是锐利的黑色方块,您可以使用角检测来识别矩形,然后挑选出最左边的四个角。我的开源GPUImage 框架中基于 Harris、Noble 和 Shi-Tomasi 角点检测方法有三种角点检测器变体。

对阈值为 0.4 且灵敏度为 4.0 的框运行 GPUImageHarrisCornerDetectionFilter 会产生以下结果:

它们有点难以看到,但红色十字准线标记了探测器在哪里发现了您的盒子的角落。同样,您只需要从最左边的四个点找到您的目标矩形,然后简单地缩放您的图像或视图,以便该矩形现在填满您的视图。

可以在我的框架中的 FilterShowcase 或 FeatureExtractionTest 示例中找到如何运行此类特征检测的示例。我在 Signal Processing 的 this answer 中描述了我执行此操作的过程。

【讨论】:

  • 非常好的解决方案! +1 来自我。不幸的是,问题已被修改为也包含圆角...
  • 感谢一个很棒的框架!但是,我无法让它工作。我什至尝试了 FeatureExtractionTest 示例,但没有找到任何角落。我已经在这里发布了我自己的问题(在看到这个之前)stackoverflow.com/questions/18914461/…
【解决方案2】:

根据我对您的问题的理解,您需要实现Canny Edge Detection Algorithm 来检测图像中黑色边框的边缘。

为此,您应该使用以下链接中提供的图像处理框架

使用 Image.m 文件中的ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh)函数。

【讨论】:

  • Canny 边缘检测在这里对您没有帮助,因为您仍然需要确定这些边缘定义的边界框。此外,它将拾取两个边缘:一个用于盒子的外部,一个用于内部。脊过滤器可能更合适,但您仍然需要从中确定框。
【解决方案3】:

似乎最简单的解决方案是:

  1. 将所有像素垂直汇总到最顶行(如 Excel 表格)
  2. 具有最小/最大值的行是您的“间隙”区域

宽度可以从(2)推导出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多