首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何消除二值图像中不必要的黑度(主要是由黑暗区域/噪声引起)

如何消除二值图像中不必要的黑度(主要是由黑暗区域/噪声引起)
EN

Stack Overflow用户
提问于 2020-08-27 08:58:57
回答 1查看 329关注 0票数 0

我正在做教科书的图片,如问题和手写笔记,我想要二值图像,用于少数几个不同的任务,主要是OCR。但问题是,如果一个图像有一点阴影或亮度水平不连续,它会给我很多黑色区域覆盖我的文字。

我在我的图片上使用了from skimage.filters import try_all_threshold,发现有些图片处理得很好,而另一些则不行。我不能使用本地阈值,在这里,我必须根据不同的图像更改参数,因为我想自动化OCR的过程。

代码语言:javascript
运行
复制
img_path = DIR+str(11)+'.png'
sk_image = imread(img_path,as_gray=True)

fig,ax = try_all_threshold(sk_image,figsize=(20,15))
plt.savefig('threshold.jpeg',dpi=350)

为什么在图像中形成这个黑色区域,我如何删除它?

BilateralGauss这样的去噪滤波器可以吗?如果没有,请提出一些其他的技巧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 16:26:06

下面是在Python/OpenCV中使用除法规范化的一种方法。

sharpen

  • Apply Otsu threshold

  • Save结果H_(214)将灰度图像分割为平滑图像

H19

输入:

代码语言:javascript
运行
复制
import cv2
import numpy as np
import skimage.filters as filters

# read the image
img = cv2.imread('math.png')

# convert to gray
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# blur
smooth = cv2.GaussianBlur(gray, (95,95), 0)

# divide gray by morphology image
division = cv2.divide(gray, smooth, scale=255)

# sharpen using unsharp masking
sharp = filters.unsharp_mask(division, radius=1.5, amount=1.5, multichannel=False, preserve_range=False)
sharp = (255*sharp).clip(0,255).astype(np.uint8)

# threshold
thresh = cv2.threshold(sharp, 0, 255, cv2.THRESH_OTSU )[1] 

# save results
cv2.imwrite('math_division.jpg',division)
cv2.imwrite('math_division_sharp.jpg',sharp)
cv2.imwrite('math_division_thresh.jpg',division)

# show results
cv2.imshow('smooth', smooth)  
cv2.imshow('division', division)  
cv2.imshow('sharp', sharp)  
cv2.imshow('thresh', thresh)  
cv2.waitKey(0)
cv2.destroyAllWindows()

部门形象:

锐化图像:

缩影图像:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63612617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档