从图像中去除 OCR 的噪声
Posted
技术标签:
【中文标题】从图像中去除 OCR 的噪声【英文标题】:removing noise from the image for OCR 【发布时间】:2021-08-16 04:15:52 【问题描述】:我正在为我的OCR Project
使用以下图片
我的主要目标是在图像预处理期间从图像中删除pen marks
。我继续进行了一些图像预处理,如下所示:
import cv2
from matplotlib import pyplot as plt
image_file = "out.jpg"
img = cv2.imread(image_file)
def grayscale(image):
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray_image = grayscale(img)
#binarization of image
thresh, im_bw = cv2.threshold(gray_image, 210, 230, cv2.THRESH_BINARY)
cv2.imwrite("bw_image.jpg", im_bw)
现在要去除噪点,即pen marks
,我写了以下噪点去除函数,但笔迹没有去除,输出几乎与二值图像相同。
def noise_removal(image):
import numpy as np
kernel = np.ones((1, 1), np.uint8)
image = cv2.dilate(image, kernel, iterations=3)
kernel = np.ones((1, 1), np.uint8)
image = cv2.erode(image, kernel, iterations=3)
image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
image = cv2.medianBlur(image, 3)
return (image)
如果有人可以指导我如何有效地减少图像中的噪点,以便我们摆脱@987654328@。此外,我还想了解图像缩放以及如何将其合并到我的代码中。我在这个平台上尝试了各种其他答案,但都没有奏效。谢谢。
【问题讨论】:
【参考方案1】:这是一个可能的解决方案:定义一个以蓝色为目标的HSV
范围。使用该图像创建一个二进制蒙版,使用形态学对其进行一点清理,并将其添加到原始图像的灰度版本中。
这是代码:
# Imports:
import cv2
import numpy as np
# image path:
path = "D://opencvImages//"
fileName = "M8N7o.jpg"
# Reading an image in default mode:
inputImage = cv2.imread(path + fileName)
# Convert RGB to grayscale:
grayscaleImage = cv2.cvtColor(inputImage, cv2.COLOR_BGR2GRAY)
# Convert the BGR image to HSV:
hsvImage = cv2.cvtColor(inputImage, cv2.COLOR_BGR2HSV)
# Create the HSV range for the blue ink:
lowerValues = np.array([103, 0, 70])
upperValues = np.array([144, 187, 225])
# Get binary mask of the blue ink:
bluepenMask = cv2.inRange(hsvImage, lowerValues, upperValues)
该位创建此二进制掩码:
如果我们使用形态学,我们可以稍微清理一下。让我们使用Closing
,它是一个膨胀,后跟一个腐蚀 来连接被分离的位。之后我们就有了一个可以添加到原始灰度图像中的白色蒙版,如下所示:
# Use a little bit of morphology to clean the mask:
# Set kernel (structuring element) size:
kernelSize = 3
# Set morph operation iterations:
opIterations = 1
# Get the structuring element:
morphKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (kernelSize, kernelSize))
# Perform closing:
bluepenMask = cv2.morphologyEx(bluepenMask, cv2.MORPH_CLOSE, morphKernel, None, None, opIterations, cv2.BORDER_REFLECT101)
# Add the white mask to the grayscale image:
colorMask = cv2.add(grayscaleImage, bluepenMask)
最后,对颜色蒙版进行阈值化,得到二值蒙版:
# Threshold via Otsu:
_, binaryImage = cv2.threshold(colorMask, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow("binaryImage", binaryImage)
cv2.waitKey(0)
这会产生最终图像:
【讨论】:
是否有更稳健的方法,我们可以将噪声分类为高斯噪声并应用任何内置的噪声去除方法? @Junaid 1) 什么噪音? 2)为了建模和分类,你会量化这种噪声的什么特征? 我在谈论一种更强大的方法。这种方法无疑是有效的,但我们是严格为蓝色墨水做的。 @Junaid 好吧,你想删除笔迹,对吧?如果您要求一种自动检测噪声的方法(在这种情况下,“噪声”是一个非常宽泛的术语,包含原始图像上没有的所有内容)并将其过滤掉,那么您就是研究一个更大、更困难的问题。一个我们甚至不确定如何定义我们应该过滤掉的问题。这超出了这个平台的范围。您可能想研究信号处理技术或基于 AI 的技术,并了解该特定问题的最新技术。以上是关于从图像中去除 OCR 的噪声的主要内容,如果未能解决你的问题,请参考以下文章