python - 从图像中删除线条用于数字检测 python 的笔记本

标签 python computer-vision ocr

我需要在一张方格纸上移除下图中数字的线条,而不会使我的数字出现任何失真。如果没有这个,我的数字检测算法就会失败,因为在感兴趣的区域中存在纸张的划线伪影。

https://www.dropbox.com/s/mjtnldwme4qqc4v/Issue_file.jpeg?dl=0 "Issue Image"

没有任何人为因素的文件的更清晰版本 Cleaner version of file

最佳答案

傅立叶域变换的经典任务。

  1. 执行傅里叶变换:

将 numpy 导入为 np 从 scipy.misc 导入 imshow、imsave、imread img = imread("10XIn.jpg")[:,:,:3] imggray = np.mean(img, -1) imfft = np.fft.fft2(imggray) mags = np.abs(np.fft.fftshift(imfft)) 角度 = np.angle(np.fft.fftshift(imfft)) 视觉= np.log(杂志) visual2 = (visual - visual.min())/(visual.max() - visual.min())*255

visual2 将如下所示: enter image description here

注意穿过中心的对角线 - 它代表您的线。

现在,我已经为这条线手动创建了掩码,但理想情况下您可以通过编程将其过滤掉 enter image description here

然后我们读取掩码并画出线条: mask = imread("fftimg4_mask.jpg")[:,:,:3] 掩码 = (np.mean(掩码,-1) > 20) 视觉[掩码] = np.mean(视觉)

然后反转 fft: newmagsshift = np.exp(视觉) newffts = newmagsshift * np.exp(1j*angles) newfft = np.fft.ifftshift(newffts) imrev = np.fft.ifft2(newfft) newim2 = 255 - np.abs(imrev).astype(np.uint8) imsave("fftimg2.jpg", newim2)

这里是 newim2 enter image description here

当然,您可以在傅里叶空间中进行更精确的修补,也可以将结果应用回原始图像以保持颜色,但我认为这篇文章说明了这个想法。

关于python - 从图像中删除线条用于数字检测 python 的笔记本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29360025/

相关文章:

python - 获取日期时间的 JSON 可序列化错误

c++ - 有什么方法可以使用 OpenCV 进行基于特征的本地化吗?

windows - 断言失败 - 训练 Tesseract

classification - 文件分类 手写或电脑打印

python - 用于 OCR 的场景文本图像超分辨率

python - 关闭时不会调用子窗口小部件的 closeEvent

python - 如何处理静态文件写app.yaml?

python - 如何使用Python转换字节数组 b'2\x000\x006\x000\x000\x000\x00\x04\x04\x04\x0 4' to Readable character string "20600"?

python - RuntimeError : Given groups=1, 大小 [64, 3, 3, 3] 的权重,预期输入 [4, 5000, 5000, 3] 有 3 个 channel ,但有 5000 个 channel

python - 为什么我不能创建图像并将其设置为 OpenCV 中的背景?