从技术绘图图像中删除圆圈
Remove circles from technical drawing image
在对技术绘图进行 OCR 处理时,大多数(所有?)ocr 引擎都存在周围几何图形的问题,有时会将线条错误地解释为字母。
为了提高 OCR 的质量,我首先想从图像中删除绘图中的某些元素,主要是圆形和矩形。
这些图都是黑白的,看起来与下面的例子非常相似。
实现此目标的最佳方法是什么?我玩过 image magick 和 opencv 但收效甚微...
这是部分解决方案。这个问题可以分为两个步骤:
1) 通过去掉横线+竖线来去掉矩形
我们创建垂直和水平内核,然后执行 morph close 来检测线条。从这里我们使用按位运算来删除行。
检测到垂直线(左)和水平线(右)
删除的行
import cv2
image = cv2.imread('1.jpg')
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,15))
remove_vertical = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, vertical_kernel)
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1))
remove_horizontal = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)
result = cv2.add(cv2.add(remove_vertical, remove_horizontal), image)
cv2.imshow('result', result)
cv2.waitKey()
2) Detect/remove 圈子
有几种方法可以去除圆圈
- 使用
cv2.HoughCircles()
. Here's a good tutorial to detect circles in images using Hough Circles
- 构造一个
cv2.MORPH_ELLIPSE
内核使用cv2.getStructuringElement()
then perform morphological operations来隔离圆轮廓
- 使用带有轮廓近似和轮廓过滤的简单形状检测来检测圆。此方法使用
cv2.arcLength()
和 cv2.approxPolyDP()
进行轮廓近似。这种方法的一个权衡是它只适用于 "perfect" 形状。看看detect simple geometric shapes and opencv shape detection
在对技术绘图进行 OCR 处理时,大多数(所有?)ocr 引擎都存在周围几何图形的问题,有时会将线条错误地解释为字母。
为了提高 OCR 的质量,我首先想从图像中删除绘图中的某些元素,主要是圆形和矩形。
这些图都是黑白的,看起来与下面的例子非常相似。
实现此目标的最佳方法是什么?我玩过 image magick 和 opencv 但收效甚微...
这是部分解决方案。这个问题可以分为两个步骤:
1) 通过去掉横线+竖线来去掉矩形
我们创建垂直和水平内核,然后执行 morph close 来检测线条。从这里我们使用按位运算来删除行。
检测到垂直线(左)和水平线(右)
删除的行
import cv2
image = cv2.imread('1.jpg')
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,15))
remove_vertical = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, vertical_kernel)
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1))
remove_horizontal = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)
result = cv2.add(cv2.add(remove_vertical, remove_horizontal), image)
cv2.imshow('result', result)
cv2.waitKey()
2) Detect/remove 圈子
有几种方法可以去除圆圈
- 使用
cv2.HoughCircles()
. Here's a good tutorial to detect circles in images using Hough Circles - 构造一个
cv2.MORPH_ELLIPSE
内核使用cv2.getStructuringElement()
then perform morphological operations来隔离圆轮廓 - 使用带有轮廓近似和轮廓过滤的简单形状检测来检测圆。此方法使用
cv2.arcLength()
和cv2.approxPolyDP()
进行轮廓近似。这种方法的一个权衡是它只适用于 "perfect" 形状。看看detect simple geometric shapes and opencv shape detection