Ⅰ 如何用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