1. 程式人生 > >霍夫變換hough、houghpeaks、houghlines

霍夫變換hough、houghpeaks、houghlines

霍夫變換在影象處理裡常用來在黑白影象裡檢測直線,matlab裡有相應的幾個函式,使用方便,這裡把matlab幫助裡介紹的例子演示一下。    matlab裡霍夫變換主要包含一下三個函式:hough:實現霍夫變換,得到霍夫變換矩陣,用法如下
[H, theta, rho] = hough(BW)[H, theta, rho] = hough(BW, ParameterName,ParameterValue)
houghpeaks:在霍夫變換矩陣裡找極值點
peaks = houghpeaks(H, numpeaks)peaks = houghpeaks(..., param1, val1,param2, val2)
houghlines:從霍夫變換矩陣中提取線段
lines = houghlines(BW, theta, rho,peaks)lines = houghlines(..., param1, val1,param2, val2)
    下面以一個例子來看看霍夫變換的效果,程式碼如下
% 測試霍夫變換
clc
clear
close all 
% 讀取影象
I  = imread('circuit.tif');
rotI = imrotate(I,33,'crop'); % 旋轉33度,保持原圖片大小
fig1 = imshow(rotI);
% 提取邊
BW = edge(rotI,'canny');
figure, imshow(BW); 
% 霍夫變換
[H,theta,rho] = hough(BW); % 計算二值影象的標準霍夫變換,H為霍夫變換矩陣,theta,rho為計算霍夫變換的角度和半徑值
figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
    'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot) 
% 顯示霍夫變換矩陣中的極值點
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); % 從霍夫變換矩陣H中提取5個極值點
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black'); 
% 找原圖中的線
lines = houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);
figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
    % 繪製各條線
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');   
    % 繪製線的起點(黃色)、終點(紅色)
    plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
    plot(xy(2,1),xy(2,2),'x','LineWidth',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),'LineWidth',2,'Color','red');

相關推薦

變換houghhoughpeakshoughlines

霍夫變換在影象處理裡常用來在黑白影象裡檢測直線,matlab裡有相應的幾個函式,使用方便,這裡把matlab幫助裡介紹的例子演示一下。    matlab裡霍夫變換主要包含一下三個函式:hough:實現霍夫變換,得到霍夫變換矩陣,用法如下[H, theta, rho] = h

9.變換:圓——介紹Hough檢測圓圓的Hough變換_1

目錄 介紹 介紹 畫好直線之後,記住,線是引數模型最簡單的形式,現在我們來看看更復雜的東西,也就是圓。 這是圓的方程,其中 a 和 b 是中心,r 是半徑: 現在我們假設半徑已知。我們只需要找到這些點的位置。 這裡有一個圓,在這個圓上有三個點,這裡的藍

8.變換:線條——介紹引數模型直線擬合_1

目錄 介紹 引數模型 直線擬合 介紹 到目前為止,我們一直在做影象處理,你把一個影象 和 應用一些函式相加得到一個新的影象我標記為。 這很好,整個課程,實際上是整個職業生涯,數以萬計的PHD寫在影象處理上。 但這不是我們來這裡的原因。 我們來談談真正的計

變換(hough transform)原理

      廣義霍夫變換之所以能處理任意形狀的圖形並不是找到了可以表示任意圖形的方程(這是不可能的),而是使用表的形式描述一種圖形,把圖形邊緣點座標儲存在一張表中,那麼該圖形就確定下來了,所以其實無論是直線(其實是線段)、圓、橢圓還是其他形狀的幾何圖形,都可以使用同一方法處理,所不同的是這時候的圖形是自定義的

變換(hough transform),從直線到圓再到一般圖形

轉自:http://blog.csdn.net/cy513/archive/2009/06/ 計算機視覺中經常需要識別或者定位某些幾何圖形,比如直線、圓、橢圓,還有其他一些圖形。檢測直線的霍夫變換提供了在影象中尋找直線的一種演算法,是最簡單的一種情形,後來發展到檢測圓、橢圓、

變換直線檢測基本原理hough,houghpeaks,houghlines

一步一步來: 1、在白紙上畫出一個直角座標系,任意給出一個點; 2、那麼,對於點(x0,y0),經過這個點的直線必定滿足y0=k*x0+b, 其中k是直線的斜率,b是直線的截距; 3、上式可以化成b=y0-k*x0,  可以看作是以-x0為斜率,以y0為截距,在k

20【opencv入門】變換變換變換合輯

接收 最大 sta point hci 都在 imread 創建 滾動 一、引言   在圖像處理和計算機視覺領域中,如何從當前的圖像中提取所需要的特征信息是圖像識別的關鍵所在。在許多應用場合中需要快速準確地檢測出直線或者圓。其中一種非常有效的解決問題的方法是霍夫(Hough

8.變換:線條——動手編碼演示_4

目錄 動手編碼 霍夫演示 動手編碼 我們將在這裡花一分鐘來演示一下,如何使用Matlab構建霍夫變換。 我再重複一遍,在你們的習題集上,你們要做一些Hough程式碼。 你不能使用已經存在的Hough實現,也不能使用其他任何人的Hough實現。 因為事實證明,當你去寫你

8.變換:線條——投票原理空間線的極座標表示_2

目錄 投票原理 霍夫空間 線的極座標表示 投票原理 就像我之前說的,檢查每一行是不可能的,即使是一臺非常非常快的電腦。 我們要做的是讓資料告訴我們,讓資料決定線在哪裡。 因為這是民主,我們該怎麼辦?   我們要做的是投票。 因此,投票是一種通用的技術

8.變換:線條——的效果噪聲對的影響拓展_5

目錄 霍夫的效果 噪聲對霍夫的影響 霍夫拓展 本環節結束 霍夫的效果 這裡我將給你們展示一個Hough執行在真實影象上的例子來告訴你們它做得好和做得不好。 這是一張美國足球場的照片: 這是美式足球,你知道,用的球不是圓的。 我們執行一個有味道的邊緣探測器

8.變換:線條——基本的變換演算法變換的複雜性例子_3

目錄 基本的霍夫變換演算法 霍夫變換的複雜性 霍夫例子 基本的霍夫變換演算法 說到演算法,我們來看一下: 我們將使用直線的極座標引數化,極座標表示。 還有一種叫Hough累加器(陣列)的東西,它只是用來表示要收集選票的東西。 在這種情況下是二維的,箱子代表不

C#下用Emgucv對圖片進行灰度化二值化邊緣檢測膨脹腐蝕運算變換進行表格識別

 其中每個部分的原理相信在各種書籍和網站上都容易找到,這裡是C#下用Emgucv實現以上相關操作的原始碼全部,轉載請註明http://write.blog.csdn.net/postlist http://blog.csdn.net/yimingsilence/ar

python變換圓形檢測cv.CV_HOUGH_GRADIENT沒有定義的解決方法

簡述   基於python使用opencv實現在一張圖片中檢測出圓形,並且根據座標和半徑標記出圓。不涉及理論,只講應用。 相關函式 函式說明: Python: cv2.HoughCircles(image, method, dp, minDist[

Hough transform(變換)

主要內容: 1、Hough變換的演算法思想 2、直線檢測 3、圓、橢圓檢測 4、程式實現 一、Hough變換簡介        Hough變換是影象處理中從影象中識別幾何形狀的基本方法之一。Hough變換的基本原理在於利用點與線的對偶性,將原始影象空間的給定的曲線

OpenCV入門:Hough變換-直線選擇(HoughLinesP)

霍夫變換HoughLinesP函式 #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp>

OpenCV入門:Hough變換-圓形選擇(HoughCircles)

霍夫變換:圓形選擇 #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #inclu

變換直線檢測houghlines及opencv的實現分析

導讀: 1. houghlines的演算法思想 2. houghlines實現需要考慮的要素 3. houghlines的opencv實現,程式碼分析 4. houghlines的效率分析,改進 1. houghlines的演算法思想 檢測直線,houghlines標準演算

影象的直線檢測——變換Hough transform)

定義: 霍夫變換(Hough Transform)是影象處理中的一種特徵提取技術,可以識別影象中的幾何形狀。它將影象空間中的特徵點對映到引數空間進行投票,通過檢測累計結果的區域性極值點得到一個符合某特定形狀的點的集合。經典霍夫變換用來檢測影象中的直線,後來霍夫變換擴充套件到

影象分割之變換Hough

在影象分割邊緣檢測一文中介紹了一些有效的邊緣檢測方法,但在實際中由於噪聲和光照不均等因素,使得很多情況下獲得的邊緣點不連續,必須通過邊緣連線將它們轉換為有意義的邊緣。一般的做法是對經過邊緣檢測的影象進一步使用連線技術,從而將邊緣要素組合成完整的邊緣。霍夫變換就是

變換 HoughLines 和 HoughLinesP

本文主要講解標準霍夫線變換(HoughLines)和統計霍夫變換(HoughLinesP)函式。 1.首先給出函式定義: void HoughLines(InputArray image, OutputArray lines, double rho, double thet