导航:首页 > 编程语言 > Hough变换python

Hough变换python

发布时间:2022-08-05 03:39:42

Ⅰ 如何用hough变换方法检测图像中的圆

Hough变换是实现图像边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间中的一条曲线或一个曲面,而具有同一参量特征的点交换后在参量空间中相交,通过判断交点处的积累程度来完成特征曲线的检测,基于参量性质的不同,Hough变换可以检测直线、圆、椭圆、双曲线、抛物线等。同时,将概率论、模糊集理论、分层迭代的思想和级联的方法应用于Hough变换的过程中,大大地提高了Hough变换的效率,改善了Hough变换的性能。

实验主要使用的函数

MATLAB内部常数pi:圆周率 p(= 3.1415926...)

MATLAB常用基本数学函数:

abs(x):纯量的绝对值或向量的长度;

round(x):四舍五入至最近整数;

floor(x):地板函数,即舍去正小数至最近整数;

MATLAB常用三角函数

sin(x):正弦函数

cos(x):余弦函数;

向量的常用函数

max(x): 向量x的元素的最大值。

MATLAB图像类型转换函数:

rgb2gray:将一副真彩色图像转换成灰度图像;

im2bw:通过设定高度阈值将真彩色,索引色,灰度图转换成二值图像;

MATLAB图形图像文件的读取和显示函数

imread(filename);

MATLAB二进制图像及其显示

imshow(f1)。

用double对二值图像双精度化

图形处理:

sobel算子检测边缘

hough变换检测圆

分别显示灰度图像:

figure;subplot

Sobel:算子边缘检测图像

hough变换检测后的图像

实验相关代码

I=imread('*.jpg');f=rgb2gray(I);

f1=im2bw(f,200/255);

BW1=double(f1);

BW=edge(BW1,'sobel',0.4);

r_max=50;

r_min=10;step_r=10;step_angle=pi/12;p=0.7;

[m,n] = size(BW);

size_r = round((r_max-r_min)/step_r)+1;

size_angle = round(2*pi/step_angle);

hough_space = zeros(m,n,size_r);

[rows,cols] = find(BW);

ecount = size(rows);

for i=1:ecount

for r=1:size_r

for k=1:size_angle

a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));

b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));

if(a>0&&a<=m&&b>0&&b<=n)

hough_space(a,b,r) = hough_space(a,b,r)+1;

end

end

end

end

max_para = max(max(max(hough_space)));

index = find(hough_space>=max_para*p);

length = size(index);

hough_circle = false(m,n);

for i=1:ecount

for k=1:length

par3 = floor(index(k)/(m*n))+1;

par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;

par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;

if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&&...

(rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)

hough_circle(rows(i),cols(i)) = true;

end

end

end

for k=1:length

par3 = floor(index(k)/(m*n))+1;

par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;

par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;

par3 = r_min+(par3-1)*step_r;

fprintf(1,'Center %d %d radius %d\n',par1,par2,par3);

para(:,k) = [par1,par2,par3];

end

subplot(221),imshow(f);

subplot(222),imshow(BW);

subplot(223),imshow(hough_circle)

Ⅱ 什么是hough变换

Hough变换利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。例如,图1(a)中的九条线段对应于如图1(b)所示的其Hough参数空间的九个累加器峰值。图1(b)中,Hough参数空间的横纵坐标分别为直线极坐标方程:ρ=x×cos(θ) + y×sin(θ) 的两个参数ρ和θ。九个峰值的ρ和θ值唯一的确定其对应线段所在直线的两个参数。并且线段的长度决定坐标(ρ,θ)处的累加值的大小。

Ⅲ Hough变换算法检测特定长度的直线

I=imread('图像名称’);
figure;imshow(I);title('原图')
I=double(I);
BW=edge(I,'canny');
[A,B,C]=hough(BW);
imshow(A,[],'XData',B,'Ydata',C,'InitialMagnification','fit'); title('hough变换图像')
xlabel('\theta'), ylabel('\rho');
axis normal,hold on;
P=houghpeaks(A,5);
x=B(P(:,2));y=C(P(:,1));
plot(x,y,'s','color','white');
lines=houghlines(O,B,C,P);
figure,imshow(N),hold on
max_len=0;
for k=1:要检测的长度值
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2),'color','green');
plot(xy(1,1),xy(1,2),'color','yellow');
plot(xy(2,1),xy(2,2),'color','red');
len=norm(lines(k).point1-lines(k).point2);
if (len>max_len)
max_len=len;
xy_long=xy;
end
end
plot(xy_long(:,1),xy_long(:,2),'color','cyan');

python为什么houghlines变换返回值有负数

PostgreSQL的二进制数据类型为bytea,可最多保存2G的数据。在ADO、ODBC等接口,可通过带参数化的插入SQL语句上传二进制。

然而在某些接口、SQL语句无法进行参数绑定,或者某些语言没有二进制的类型,或者接口的不兼容等原因,常无法上传二进制数据。

碰到这种情况下,必须在客户端将二进制转化为一定规则的字符序列,然后插入语句时,来个显示转换cast('字符序列' as bytea).

二进制转化为字符序列的规则:

分析每个字节,当其ASCII值在0到31,127到255,或为39、92,请将这字节转化为3位的八进制字符串,前面加上2个反斜杠,如chr(39)表示为//047. 其他ascii值为可显示字符,不变,当然你也可全部转化为八进制,但这样整个字符串太长,浪费空间。

如二进制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'转化为字符序列为:

//000ab//351//031c

上传的时候再来个显示转换,如 insert into table1 (aa) values (cast('//000ab//351//031c' as bytea))

如果二进制数据太大,可分次上传,用||连接符连接起来,如:

insert into table1 (id,aa) values (1,cast('序列1' as bytea))

update table1 set aa=aa||cast('序列2' as bytea) where id=1

Ⅳ 霍夫圆检测怎么从Python3转到Python2

我只知道官网有自动将2的语法转成3的软件,不知道怎么从3转成2,你自己到官网找找,说不定也有

Ⅵ python 爬虫,怎么获得输入验证码之后的搜索结果

首先,题主在程序中输入验证码,主要是想尽量模仿真人的搜索,结果发现所有cookie是一样的,无需做这一步验证码的输入,如果是这样的话,无需验证码。另外,按题主的代码来看,题主只要比较一下输入验证码之前和之后的cookie,如果没有差别,就去掉验证码处理。如果有差别,说明在验证码的处理中还是做了些事情,就需要验证码。

题外话,题主整个思路想复杂了,对于我们政府的网站,其实没有这么精细的逻辑,比如你上面那个只需要拼接成get请求就可以。

Ⅶ Hough变换的算法步骤

传统的hough变换计算量大,而且速度慢,所以我采用按照已有算法进行的。虽然对算法理解了,但是由于编程图像变成黑白的,只提取段落的边界,应该会快一些

Ⅷ Hough变换

Hough变换是利用图像全局特性有可能把边缘象素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便地得到边界曲线,把不连续的边缘象素点连接起来,还可以直接检测某些已知形状的目标,并有可能确定边界到亚象元精度。其主要优点是受噪声和曲线间断的影响小。为了便于理解Hough变换这种功能,先举一个简单例子。设给定图像中的n个点,要从中确定连在同一直线上的点的子集。这可看作已检测出的若干点,去求出它们所在的直线。一种直接解决办法是先确定所有由任意两点决定的直线(约需n2次运算以确定n(n-1)/2 条直线),再找出接近具体直线的点的集合(约需n2次运算以比较n个点中的每一个与n(n-1)/2条直线中的每一条)。这么大的计算量实际上不易实现。如果用Hough变换:的方法就可用较少的计算量来解决这个问题。这种变换的基本思想是点一线的对偶性,Duality在图像空间XY中,所有过点(x,y)的直线都满足方程:

Y=px + q (5-15)

式中P为斜率,q为截距,式(5-15)也可以写成:

q=- px + Y (5-16)

式(5-16)可以认为是代表参数空间PQ中过点(p,q)的一条直线。

现在来看图5-9a表示图像空间,(b)表示参数空间。在图像空间XY中,过点(xi,yi)的通用直线方程按式(5-15)可写为yi=pxi+q,也可以按式(5-16)写为q=-pxi+yi;它表示在参数空间PQ里的另一条直线。设这两条直线在参数空间PQ里相交于点(p′,q′),这里点(p′,q′)对应图像空间XY中一条过点(xi,yi)和(xi,yi)的直线,因此在图像空间XY中过点(xi,yi)和(xj,yj)的直线上的每个点都对应在参数空间PQ里的一条直线,这条直线相交于点(p′,q′)。

由此可知,在图像空间中共线的点对应在参数空间里相交的线。反过来在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。这就是点线对偶性。Hough变换就是根据这些关系把在图像空间中的检测问题转换到参数空间里,通过较简单的累加统计完成检测任务。

在具体计算时需要在参数空间PQ里建立一个二维累加数组。设这个累加数组为A(p,q),如图5-10所示。其中[Pmin,Pmax]和[qmin,qmax]分别为预期的斜率和截距的取值范围。开始时置数组A为零,然后对每一个图像空间中的给定点,让p取遍p轴上所有可能的值,并根据式(5-16)算出对应的q,再根据p和q的值(设都已经取整)对A累加:A(p,q)=A(p,q)+1,累加结束后,根据A(p,q)的值就可知道有多少点是共线的,即A(p,q)的值就是在(p,q)处共线点的个数。同时(p,q)值也给出了直线方程的参数,于是我们得到了点所在的线。

图5-9 图像空间和参数空间中点和线的对偶性

图5-10 参数空间里的累加数组示意图

假设我们把P轴分成K份,即P取K个值,那么对每一个点(xk,yk)由式(5-16)可得到q的K个值。因为图中有n个点,所以这里就需要nK次运算。可见运算量是n的线性函数。如果K比n小,则总计算量必小于n2,这就是Hough变换的优势所在。

Hough变换不仅可用来检测直线和连接处在同一条直线上的点,也可以用来检测满足解析式f(x,c)=0形式的各类曲线并把曲线上的点连接起来。这里x是一个坐标矢量,在二维图像中是一个二维矢量,c是一个系数矢量,它可以根据曲线的不同,从二维、三维到四维等,凡能写出方程的图形,都可以利用Hough变换来检测。

自然界有许多要素有一定的形状、分布与伸展方向,但可能受其他因素遮蔽而显现得不清晰或断断续续,例如,地质体的线性构造、环形构造等,在地质探矿、地质稳定性分析等方面都有重要意义,可是在遥感图像上有时反映得不太清楚,如果借鉴Hough变换的基本思想来处理图像,可能有助于构造信息的提取。

Ⅸ 谁能说说Hough变换,还有那个公式p=xcos(o)+ysin(o) ,怎么用我太笨了,找了那么多,都没看懂,拜托了

原点0 到直线的垂线 能套出这个公式吧;
那么其他点呢? 任选一点p,
过p点根据我们想要的距离r, 做完全平行于该条直线的辅助线.
那么新的过p点的r 是不是相较于x 轴分成了两部分, 根据p的坐标p(x,y)分别求出这两份的长度加起来, 发现还是r = xcos + ysin

阅读全文

与Hough变换python相关的资料

热点内容
闽政通无法请求服务器是什么 浏览:48
怎么做积木解压神器 浏览:203
王者荣耀解压玩具抽奖 浏览:49
12位是由啥加密的 浏览:868
程序员编迷你世界代码 浏览:895
php取现在时间 浏览:246
单片机高吸收 浏览:427
怎么区分五代头是不是加密喷头 浏览:244
hunt测试服务器是什么意思 浏览:510
2013程序员考试 浏览:641
毕业论文是pdf 浏览:736
服务器跑网心云划算吗 浏览:471
单片机定时器计数初值的计算公式 浏览:801
win7控制台命令 浏览:567
猫咪成年app怎么升级 浏览:692
360有没有加密软件 浏览:315
清除cisco交换机配置命令 浏览:751
华为删除交换机配置命令 浏览:473
shell打包命令 浏览:827
加密狗插上输不了密码 浏览:187