直线霍夫变换笔记

霍夫变换(Hough)

百度百科
霍夫变换是一种特征检测(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:线条。他的算法流程大致如下,给定一个物件、要辨别的形状的种类,算法会在参数空间(parameter space)中执行投票来决定物体的形状,而这是由累加空间(accumulator space)里的局部最大值(local maximum)来决定。

非常官方的定义,就是看完还是啥都不懂。在我理解看来就是坐标系的映射,类似于直角坐标映射到极坐标,把图像形状所处的二维直角坐标映射到参数空间。在这里拿直线霍夫变换为例。

直线霍夫变换

一个平面直角坐标系里的一条直线,长这样,公式咋写啊
y = a x + b y=ax+b y=ax+b 在这里插入图片描述
霍夫说了我就不这么写,我想这么写
y = − c o t ( t h e t a ) x + ρ ∗ c o s ( t h e t a ) ∗ c o t ( t h e t a ) + ρ ∗ s i n ( t h e t a ) y=-cot(theta)x+ρ*cos(theta)*cot(theta)+ρ*sin(theta) y=cot(theta)x+ρcos(theta)cot(theta)+ρsin(theta)
在这里插入图片描述
公式记得住记不住无所谓了,反正规定的就是上面这张图这样,简单易懂,他就打算把这个直角坐标系里的直线给整到ρ和theta的坐标系里,挺好的一个ρ一个theta就能确定一根直线。
对于一张离散的图片边缘提取矩阵来说,我们把边缘的每一个点都做霍夫变换得到ρ-theta坐标系的一条曲线,这条曲线上的的所有点,都是过这个点的直线,所有的直线累加在一起对应的最大重合点就是对应直线的ρ-theta方程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200309234915773.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW5vdGs=,size_16,color_FFFFFF,t_70

下图为两条直线的霍夫变换
在这里插入图片描述
附一个简单的霍夫变换子程序

def hough(img):
	a,b=img.shape
	hough_change=np.zeros((4*int(a+b),181))
	for i in range(a):
		for j in range(b):
			if img[i,j]==1:
				for theata in range(181):
					d=int(i*np.cos(np.pi*theata/180)+j*np.sin(np.pi*theata/180))
					hough_change[d+a+b,theata]+=1
	return hough_change

一个简单的逆变换子程序

def rehough(hough,passval):#passval为自己设定的阈值
	recoding=[]
	a,b=hough.shape
	for i in range(a):
		for j in range(b):
			if hough[i,j]>=passval:
				recoding.append((i,j))
	return recoding

一个自己写着玩的小例子,因为嫌麻烦只找了最大值对应的直线
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值