霍夫变换 文本图片倾斜矫正 python实现


前言:原创不易,转载请告知并注明出处!扫码关注公众号【机器学习与自然语言处理】,定期发布知识图谱,自然语言处理、机器学习等知识,添加微信号【17865190919】进讨论群,加好友时备注来自优快云。
在这里插入图片描述

一、霍夫变换原理简介

霍夫变换主要是利用图片所在的空间和霍夫空间之间的变换,将图片所在的直角坐标系中具有形状的曲线或直线映射到霍夫空间的一个点上形成峰值,从而将检测任意形状的问题转化成了计算峰值的问题。即在图片所在的直角坐标系的一个直线,转换到霍夫空间便成了一点,并且是由多条直线相交而成,我们统计的峰值也就是该相交点的橡胶线的条数

这么难以理解,下面将用霍夫直线检测具体解释一下为什么可以将检测任意形状问题转化成计算峰值问题
对图片建立直角坐标系,则图片中如果存在一条直线,设为:y = k*x + b,此空间x、y 为未知数,k、b是参数; 而霍夫空间便是将k、b看成未知数,x、y看成参数,因此霍夫空间便是 b = -x*k + y

如果图片中有一条长的直线:y = k*x + b,那么肯定由很多个像素点(x0, y0)构成,但k、b是固定的,将这条直线上的像素点全部映射到霍夫空间中,(k, b)是一个固定的点,但(x0, y0)不同,所以在霍夫空间中便形成了多条直线汇聚于一点。如下图:

因此得出结论: 我们便是在霍夫空间中统计多个(k、b),对每一个(k, b)上的直线条数进行统计,计算出峰值最高的那个,也就是在图片所在直角坐标系中我们要检测的直线。此时在回看最初那句话应该更理解了。


二、python霍夫变化实现文本图片倾斜矫正

先上图:

python实现

#先通过hough transform检测图片中的图片,计算直线的倾斜角度并实现对图片的旋转
import os
import cv2
import math
import random
import numpy as np
from scipy import misc, ndimage

filepath = 'E:/peking_rw/hough transform/tilt image correction/test image'
for filename in os.listdir(filepath):
	img = cv2.imread('E:/peking_rw/hough transform/tilt image correction/test image/%s'%filename)
	gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
	edges = cv2.Canny(gray,50,150,apertureSize = 3)
	
	#霍夫变换
	lines = cv2.HoughLines(edges,1,np.pi/180,0)
	for rho,theta in lines[0]:
	    a = np.cos(theta)
	    b = np.sin(theta)
	    x0 = a*rho
	    y0 = b*rho
	    x1 = int(x0 + 1000*(-b))
	    y1 = int(y0 + 1000*(a))
	    x2 = int(x0 - 1000*(-b))
	    y2 = int(y0 - 1000*(a))
	if x1 == x2 or y1 == y2:
		continue
	t = float(y2-y1)/(x2-x1)
	rotate_angle = math.degrees(math.atan(t))
	if rotate_angle > 45:
		rotate_angle = -90 + rotate_angle
	elif rotate_angle < -45:
		rotate_angle = 90 + rotate_angle
	rotate_img = ndimage.rotate(img, rotate_angle)
	misc.imsave('E:/peking_rw/hough transform/tilt image correction/test result/%s'%filename, rotate_img)

倾斜图片简单测试集,密码:n3kv

供参考!

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值