【问题标题】:Need to find a way to extract coordinates of shaded region from an image file需要找到一种从图像文件中提取阴影区域坐标的方法
【发布时间】:2014-10-15 18:47:26
【问题描述】:

我有一个图像文件,其中包含披萨形状的阴影区域:

我需要一种方法来提取阴影区域的坐标,以便我可以在 html 代码中使用它们来使该区域可点击。这需要动态完成,因为我有成千上万的图像。我目前正在用 PHP 开发网站,所以任何用 php 或 javascript 的东西都会有帮助。如果有人知道如何做到这一点,请告诉我。

【问题讨论】:

  • 到目前为止你做了什么?什么对你不起作用?请分享您的代码。
  • 图像是否总是相同的格式?我的意思是,颜色总是相同的,与外圆相关的内圆是否总是在相同的位置终止灰色区域,并且圆的半径总是相对于相同的位置图像的边框?此外,这些是否需要每次都即时生成,或者您可以将结果缓存在某处?在图像分析方面并不是什么神童,我可以想到一些处理密集型的方法来做到这一点,但这只有在你可以缓存结果的情况下才有效。无论如何,有趣的问题。
  • 您是否有权访问基础数据?如果您知道(例如)在 0.23MB 和 0.26MB 之间会有一个热区,那么定义坐标会更容易、更可靠。这将使您完全解决图像分析问题,并让您专注于解决更简单的圆形段(“披萨片”)作为热区的问题。
  • 哪个阴影区域?有 12 个灰色阴影区域?

标签: php image coordinates region


【解决方案1】:

我能想到你需要采取的一些步骤,但由于你没有起点,我将在高层次上描述我的方法。

  1. 找到中心点,称之为 c。不太难宽/2高/2。它 看起来这些图像是由计算机生成的,所以我会 假设它们都是标准的,它们的尺寸和位置 圆。

  2. 您现在需要找到半径为 r 的圆上的所有点 (从中心到容易识别的橙色的距离 仅存在于阴影区域的区域)和中心 c。

  3. 使用 PHPs imagick 库测试图像上的所有这些点,然后 getImagePixelColor 测试结果是否接近容易 可识别的橙色。如果是的话,你有一个匹配。

  4. 对于每个匹配,从圆心到 match 是阴影区域的一部分。仅查找 a 的最外层匹配项 地区,你有你的协调员。


我确信这只是一种方法,并且有很多方法可以做到,但我建议您开始实施您认为可行的方法,然后在遇到困难时提出更具体的问题。

【讨论】:

    【解决方案2】:

    我会使用 ImageMagick 将圆盘从极坐标转换为笛卡尔坐标,然后,当您阐明您实际指的是哪些阴影区域时,我怀疑其余部分会很容易:

    convert disc.png -distort DePolar 0 cartesian.jpg
    

    由于我没有收到您的任何反馈,因此我正在思考。因此,您还可以将所有非灰色阴影转换为白色,将所有灰色转换为黑色,如下所示:

    convert disc.png -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black out.png
    

    而且,你可以同时做到这两点:

    convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black out.png
    

    然后您可以将图像压缩成一行,如下所示:

    convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! out.png
    

    (我会将其显示为 10 像素高,以便您看到它)

    现在,您的坐标是行从黑色变为白色以及从白色变为黑色的位置。您可以将它们提取到文本中并解析出来。像这样:

    convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! -colorspace gray -threshold 50% txt: | more 
    # ImageMagick pixel enumeration: 1000,1,255,srgba
    0,0: (255,255,255,1)  #FFFFFF  white
    1,0: (255,255,255,1)  #FFFFFF  white
    2,0: (255,255,255,1)  #FFFFFF  white
    3,0: (255,255,255,1)  #FFFFFF  white
    4,0: (255,255,255,1)  #FFFFFF  white
    5,0: (255,255,255,1)  #FFFFFF  white
    6,0: (255,255,255,1)  #FFFFFF  white
    7,0: (255,255,255,1)  #FFFFFF  white
    

    或者像这样:

    convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! -colorspace gray -threshold 50% -compress none pbm: | more 
    P1
    1000 1
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    

    【讨论】:

    • 哇,这样一个老问题的综合答案。太棒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多