【问题标题】:How to filter image to throw away stray pixels?如何过滤图像以丢弃杂散像素?
【发布时间】:2019-07-06 02:26:10
【问题描述】:

我的图像数据主要包含被无聊的黑色背景包围的圆形图像。我通过使用 PIL 的 getbbox() 抓取边界框,然后裁剪来处理这个问题。这让我有些满意,但是在无聊的黑色海洋中的微小灰色斑点会导致 getbbox() 返回太大的边界框。

附上故意生成的有问题的图片;注意右下角的单个深灰色像素。我还包括了一个更典型的“现实世界”图像。

Generated problematic image Real-world image

我在 PIL ImageFilter 模块中对 UnsharpMask 和 SHARP 和 BLUR 滤镜做了一些处理,但没有成功。

我想扔掉那些杂散的灰色像素并获得一个漂亮的边界框,但又不会占用我的图像数据。

【问题讨论】:

  • 您能否详细说明您的问题。目前还不清楚您要做什么。在问题中发布你的输入图像、你得到的输出和你想要的输出
  • '无聊的黑色海洋中的微小灰色斑点'似乎是噪音。申请前删除getbbox()

标签: image-processing python-imaging-library


【解决方案1】:

您想对图像的副本运行 median 过滤器以获取边界框,然后将该边界框应用于您的原始、未模糊图像。所以:

  • 复制您的原始图片
  • 对副本应用中值模糊滤镜 - 可能是 5x5,具体取决于斑点的大小
  • 获取边界框
  • 将边界框应用于您的原始图像。

这里有一些代码可以帮助您入门:

#!/usr/local/bin/python3

import numpy as np
from PIL import Image, ImageFilter

# Load image 
im = Image.open('eye.png').convert('L')
orig = im.copy()    # Save original

# Threshold to make black and white
thr = im.point(lambda p: p > 128 and 255)
# Following line is just for debug
thr.save('result-1.png')

# Median filter to remove noise
fil = thr.filter(ImageFilter.MedianFilter(3))
# Following line is just for debug
fil.save('result-2.png')

# Get bounding box from filtered image
bbox = fil.getbbox()

# Apply bounding box to original image and save
result = orig.crop(bbox)
result.save('result.png')

【讨论】:

    猜你喜欢
    • 2018-11-09
    • 2021-06-30
    • 2021-06-26
    • 1970-01-01
    • 2019-12-27
    • 2018-12-08
    • 2011-06-30
    • 2011-12-20
    • 2019-12-12
    相关资源
    最近更新 更多