使用霍夫變換定位手指邊緣

2021-10-04 14:22:41 字數 1688 閱讀 3171

大小為1024*1280,這裡先定位上邊緣,再定位到下邊緣

上邊緣(行數1:512)

img = imread('./g_a01_l1_2_r.bmp');

% convert to intensity.

i =imbinarize(img);

figure;

subplot(2,2,1);

imshow(i);

title('binary image');

% extract edges.

bw1 = edge(i,'prewitt');

subplot(2,2,2);

imshow(bw1);

title('edge');

[h1,t1,r1] = hough(bw1);

%顯示變換域

subplot(2,2,3);

imshow(imadjust(rescale(h1)),'xdata',t1,'ydata',r1,'initialmagnification','fit');

xlabel('\theta');

ylabel('\rho');

title('change domain');

axis on,axis normal,hold on

%計算變換域峰值

p1 = houghpeaks(h1,'threshold',ceil(0.3*max(h1(:))));

x=t1(p1(:,2));

y=r1(p1(:,1));

plot(x,y,'s','color','red');

%標記直線

l1 = houghlines(bw1,t1,r1,p1,'fillgap',200,'minlength',100);

subplot(2,2,4);

imshow(rgb);

title('result')

hold on

max_len=0;

for k=1:length(l1)

xy=[l1(k).point1;l1(k).point2];

plot(xy(:,1),xy(:,2),'linewidth',2,'color','green');

%plot beginning and ends of lines

plot(xy(1,1),xy(1,2),'xw','linewidth',2);

plot(xy(2,1),xy(2,2),'xw','linewidth',2);

%determine the endpoints of the longest line segment

len=norm(l1(k).point1-l1(k).point2);

if(len>max_len)

max_len=len;

xy_long=xy;

endend

下邊緣(513:1024)只需要改行數

效果圖:

OpenCV 霍夫線變換 霍夫圓變換

關於霍夫變換在官方文件opencv249裡的描述如下 api如下 void houghlines inputarray image,outputarray lines,double rho,double theta,int threshold,double srn 0,double stn 0 vo...

缺點 霍夫圓 霍夫變換

霍夫變換是一種特徵提取,被廣泛應用在影象分析 電腦視覺以及數字影像處理。霍夫變換是用來辨別找出物件中的特徵,例如 線條。他的演算法流程大致如下,給定乙個物件 要辨別的形狀的種類,演算法會在引數空間中執行投票來決定物體的形狀,而這是由累加空間 accumulator space 裡的區域性最大值來決定...

霍夫變換 Hough Transform

霍夫變換的主要作用是從影象中檢測出具有某種相同特徵的幾何形狀,如直線 圓等。霍夫變換的基本原理 例如檢測情景為直線檢測。我們知道,在直角座標系下,直線方程表示為y k x b 其中k,b 為引數,表示直線的斜率和截距。那麼,對於直角座標系下的某個特定點 x 0,y0 過該點的任意直線方程為y0 k ...