gpt4 book ai didi

python - python 中的氡变换

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:06 25 4
gpt4 key购买 nike

这是一个伪代码:

def radon(img):
theta = np.linspace(-90., 90., 180, endpoint=False)
sinogram = skimage.transform.radon(img, theta=theta, circle=True)
return sinogram
# end def

我需要在不使用 skimage 的情况下获取此代码输出的正弦图。但我无法在 python 中找到任何实现。您能否提供仅使用 OpenCV、numpy 或任何其他轻量级库的实现?

编辑:我需要这个来获得图像的主导角度。我正在尝试修复 OCR 系统字符分割前的倾斜问题。示例如下:

enter image description here

左侧是输入,右侧是所需的输出。

编辑 2:如果您可以提供任何其他方式来获取此输出,它也会有所帮助。

编辑 3:一些示例图片: https://drive.google.com/open?id=0B2MwGW-_t275Q2Nxb3k3TGg4N1U

最佳答案

嗯,我有一个类似的问题。在花了一些时间谷歌搜索这个问题后,我找到了一个适合我的解决方案。希望对您有所帮助。

import numpy as np
import cv2

from skimage.transform import radon


filename = 'your_filename'
# Load file, converting to grayscale
img = cv2.imread(filename)
I = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
h, w = I.shape
# If the resolution is high, resize the image to reduce processing time.
if (w > 640):
I = cv2.resize(I, (640, int((h / w) * 640)))
I = I - np.mean(I) # Demean; make the brightness extend above and below zero
# Do the radon transform
sinogram = radon(I)
# Find the RMS value of each row and find "busiest" rotation,
# where the transform is lined up perfectly with the alternating dark
# text and white lines
r = np.array([np.sqrt(np.mean(np.abs(line) ** 2)) for line in sinogram.transpose()])
rotation = np.argmax(r)
print('Rotation: {:.2f} degrees'.format(90 - rotation))

# Rotate and save with the original resolution
M = cv2.getRotationMatrix2D((w/2, h/2), 90 - rotation, 1)
dst = cv2.warpAffine(img, M, (w, h))
cv2.imwrite('rotated.jpg', dst)

测试:
原图:
enter image description here

旋转图像:(旋转度数为-9°)
enter image description here

致谢:
Detecting rotation and line spacing of image of page of text using Radon transform

问题是旋转图像后,你会得到一些黑边。对于您的情况,我认为这不会影响 OCR 处理。

关于python - python 中的氡变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46084476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com