【问题标题】:delete extra lines in image删除图像中的多余线条
【发布时间】:2018-03-24 05:13:24
【问题描述】:

我有一张背景几乎平滑的图像,上面有一些额外的线条。我想将图像从 RGB 颜色空间转换为 LAB 颜色空间,然后对像素的“L”部分进行平均。

但在转换之前,我想删除多余的线条或以某种方式忽略线条像素,以平均“L”部分。有什么算法可以做到这一点吗?

以下是我的图片示例。

【问题讨论】:

  • 您到底想删除什么以及您想保留什么? (请不要回复“多余的行”。)
  • 如您所见,背景中有主色。还有一些形状被视为线条(我的意思是较暗的像素)。我必须删除这些较暗的部分。
  • 请注意多余的线条不一定更暗。我想删除主色以外的像素。
  • 我们将用什么来代替 "deleted" 像素?
  • @MarkSetchell 什么都没有!删除我的意思是不将它们包括在平均中。

标签: algorithm opencv image-processing


【解决方案1】:

一种选择是计算梯度(例如 Sobel)并避免在梯度幅度很大时进行累积。

根据@Paul 的评论,看看阈值水平对计算平均值的影响将会很有趣。

【讨论】:

    【解决方案2】:

    我正在使用 ImageMagick,就像您的其他问题一样。

    这将为您提供与周围区域相差超过 5% 的所有像素的蒙版(这是-fx 部分中的0.05)。它的工作原理是加载石头图像、复制它并模糊副本以删除局部细节。然后计算原始副本和模糊副本之间的绝对差异,如果差异超过 5%,则将像素设置为 1,否则将其设置为 0

    convert stone.jpg -colorspace gray \( +clone -blur x10 \) -fx "abs(u-v)>0.05?1:0" mask.png
    

    尝试更改0.05,看看你的想法。


    这将告诉您蒙版中有多少像素是白色的。它依赖于像素亮度总和除以像素数的平均值,并且知道所有像素都是01

    convert mask.png -format "%[fx:int(mean*w*h)]" info:
    6155
    

    这将使所有蒙版像素变黑。它的工作原理是同时加载石头和蒙版,反转蒙版,然后在每个像素位置,选择两个图像中较暗的那个 - 所以它会在蒙版为白色的地方选择黑色,而在其他地方选择石头:

    convert stone.jpg \( mask.png -negate \) -compose darken -composite nolines.png
    

    【讨论】:

    • 你能解释一下算法吗?我打算用opencv写算法。
    • 我可以试试。您正在为哪些步骤而苦苦挣扎?顺便给你的问题添加OpenCV标签。
    【解决方案3】:

    在 ImageMagick 中,如果将要忽略的像素设为透明,则可以使用 -scale 1x1! 获得所有不透明像素的平均值。比如上面两张图:

    所以先将蒙版放入alpha通道,然后将结果缩放到一个像素,关闭alpha,得到像素颜色:

    convert image.jpg mask.png -alpha off -compose copy_opacity -composite -scale 1x1! -alpha off -format "%[pixel:u.p{0,0}]" info:
    srgb(231,214,198)
    

    为了检查,让我们做一个样本:

    convert -size 100x100 xc:"srgb(231,214,198)" swatch.png
    

    或者我们可以重新着色原始图像:

    convert image.jpg -fill "srgb(231,214,198)" -colorize 100 newimage.png
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多