将图像转换为黑白以在 R 中进行图像识别

问题描述 投票:0回答:3

我正在尝试获得一些自动文本识别的经验,并且我正在使用包 tesseract 对某些图像(即我拍摄的一些屏幕截图)执行 ocr

为了提高程序识别下图中价格的性能,我使用 magick 包对图像进行了一些预处理,通过更改亮度和饱和度参数来增加图像的对比度。

但是,我认为通过转换为黑白图像可以进一步提高性能。

如何在R中有效地实现这一点?

原图

预处理后

r image-processing tesseract contrast text-recognition
3个回答
9
投票

您可以使用

magick::image_quantize
转换色彩空间:

library(magick)
#> Linking to ImageMagick 6.9.9.25
#> Enabled features: cairo, fontconfig, freetype, fftw, lcms, pango, rsvg, webp
#> Disabled features: ghostscript, x11

i <- image_read('https://i.stack.imgur.com/nn9k0.png')

i

i %>% image_quantize(colorspace = 'gray')

根据您想要的图像结构,您也可以使用

image_convert
来做同样的事情:

i %>% image_convert(colorspace = 'gray')
# or
i %>% image_convert(type = 'Grayscale')

或转换为真黑白(不是灰度),

i %>% image_convert(type = 'Bilevel')

在这种情况下返回带有椒盐噪声的图像,这可能有用也可能没用。

但请注意,虽然这对于 OCR 来说可能是一个很好的做法,但通过网络抓取来获取这些数据会简单得多,例如如果允许的话,使用 rvest (大概同样的问题也适用于抓取这些图像)。如果它包含您需要的信息,更好的是使用适当的 RyanAir API


5
投票

在 ImageMagick 命令行中,您可以简单地将阈值设置为某个百分比。我这里使用了 50%,但可以根据需要进行调整。

convert image.png -threshold 50% result.png

在Imagick中,命令是Imagick::thresholdImage。请参阅 http://php.net/manual/en/imagick.thresholdimage.php。抱歉,我不知道您使用的是哪个“Magick”软件包。


0
投票

要使用 R 中的

magic
库将图像转换为黑白图像,需要执行以下步骤:

  • 首先,我们将图像转换为灰度颜色空间
  • 然后我们将所有低于阈值的像素强制为黑色,同时保持所有等于或高于阈值的像素不变
  • 最后,我们将所有高于阈值的像素强制为白色,同时保持所有等于或低于阈值的像素不变

结果是黑白图像。这是一个代码片段:

library(magick)
library(magrittr)

img <- image_read('https://i.stack.imgur.com/nn9k0.png')
img %>%
    image_convert(colorspace = "Gray") %>% 
    image_threshold(type = "black", threshold = "50%") %>%
    image_threshold(type = "white", threshold = "50%")

阈值可以不同。

© www.soinside.com 2019 - 2024. All rights reserved.