skimage中的图像文本提取

问题描述

我有一张图片,我想对其进行过滤以将其与背景分开:

The image before processing

并应用以下代码后:

key

图片变成

Image after processing

有没有一种方法可以使结果更好?

解决方法

是的,您可以获得更好的结果:

Filtered result

您确实考虑了噪声,但是您应用的高斯模糊太强了;它会逐渐淡化您感兴趣的功能(字母)。

正如@Ziri在评论中指出的那样,您并不能解释图像中存在的曝光不均。有很多方法可以做到这一点。我将使用滚动球滤镜来平滑背景,并将其与全局阈值方法结合起来。请注意,这是目前(2020年8月)skimage中的PR,但希望很快会被合并。

import numpy as np
import matplotlib.pyplot as plt

from skimage import util
from skimage import filters
from skimage import io
from skimage import exposure

# PR 4851; will hopefully be in the library soon(TM)
from skimage.morphology import rolling_ellipsoid

img = io.imread("test.jpg",as_gray=True)
img_inv = util.invert(util.img_as_float(img))

# blurr the image slightly to remove noise
blurred = filters.gaussian(img_inv,sigma=1.0)

# remove background
background = rolling_ellipsoid(blurred,kernel_size=(50,50),intensity_vertex=0.1)
normalized = blurred - background

# re-normalize intensity
normalized = exposure.rescale_intensity(normalized)

# binarize
binary = normalized > 0.38
binary = util.invert(binary)
plt.imshow(binary,cmap="gray")
plt.gca().axis("off")
plt.show()

旁注:将未经审查的护照照片上传到SO,任何人都可以免费访问它,这是不明智的。