虹膜識別(三):Hough變換檢測內圓邊緣
前面我們已經得到了hough變換的基礎條件,那就是有一個很好的用於檢測的二值邊緣影象如下所示:
至此我們才能運用hough變換。
Hough變換是一類廣泛用於檢測各種規則圖形用的,像直線、圓、橢圓等等,不同的就是檢測的規律不同。Hough變換的原理網上多得是,像http://blog.163.com/yuyang_tech/blog/static/21605008320130233343990/ 我當初也是百度上查的,就不詳細說原理了(可能也說不明白),直接上程式了。。
function mean_circle = hough_circle(BW,step_r,step_angle,r_min,r_max,p) %------------------------------演算法概述----------------------------- % 該演算法通過a = x-r*cos(angle),b = y-r*sin(angle)將圓影象中的邊緣點 % 對映到引數空間(a,b,r)中,由於是數字影象且採取極座標,angle和r都取 % 一定的範圍和步長,這樣通過兩重迴圈(angle迴圈和r迴圈)即可將原影象 % 空間的點對映到引數空間中,再在引數空間(即一個由許多小立方體組成的 % 大立方體)中尋找圓心,然後求出半徑座標。 %------------------------------------------------------------------- %------------------------------輸入引數----------------------------- % BW:二值影象; % step_r:檢測的圓半徑步長 % step_angle:角度步長,單位為弧度 :各度計算 1° = 0.0174 % 2° = 0.035 % 3° = 0.0524 % 4° = 0.0698 % 5° = 0.0872 % r_min:最小圓半徑 % r_max:最大圓半徑 % p:以p*hough_space的最大值為閾值,p取0,1之間的數 %------------------------------------------------------------------- % --------對半徑的大小範圍規定問題-------- % ------ 實驗中發現:外輪廓的半徑範圍在220~260之間 % 內輪廓的半徑範圍 60~80之間 % Note:: &&&&&&&&&&&當影象改變時半徑範圍需要改變&&&&&&&&&&&& % question: 半徑的範圍差超過50將會顯示記憶體不足,注意方案辦法 %------------------------------輸出引數----------------------------- % hough_space:引數空間,h(a,b,r)表示圓心在(a,b)半徑為r的圓上的點數 % hough_circl:二值影象,檢測到的圓 % para:檢測到的所有圓的圓心、半徑 % mean_circle : 返回檢測到的圓的平均位置及大小 %------------------------------------------------------------------- [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); %hough空間 [rows,cols] = find(BW);%把要檢測的點存起來,只有白色(邊緣)點需要變換 ecount = size(rows); %檢測的點的個數 tic %%%% 計時開始位置 % Hough變換 % 將影象空間(x,y)對應到引數空間(a,b,r) % a = x-r*cos(angle) % b = y-r*sin(angle) 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); toc %%%% 計時結束位置,通過計時觀察執行效率,hough變換的一大缺點就是耗時 % 將索引結果轉換為對應的行列(圓心)和半徑大小 % 理解三維矩陣在記憶體中的儲存方式可以理解公式的原理 for k=1:length par3 = floor(index(k)/(m*n))+1; par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;%轉換為圓心的y值 par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;%轉換為圓心的x值 par3 = r_min+(par3-1)*step_r; %轉化為圓的半徑 %儲存在一起 para(:,k) = [par1,par2,par3]'; end % 為提高準確性,求取一個大致的平均位置(而不是直接採用的最大值) mean_circle = round(mean(para')');
匯入二值圖後,設定一定步長引數執行,例如:mean_circle = hough_circle(J,2,0.0524,60,80,0.9);
這樣就得到了內圓的引數值,執行結果如下:
執行時間:Elapsed time is 0.409292 seconds.
>> mean_circle
mean_circle =
326
331
66
可以看到圓心座標和半徑引數,在座標中畫出這個圓,編寫畫圓函式如下:
function plot_circle(circle_num) %------------------------------輸入引數----------------------------- %給定圓的引數畫出一個圓形 %圓引數 circle_num: % circle_num(1) : 圓心橫座標 % circle_num(2) :圓心縱座標 % circle_num(3) :圓的半徑 %------------------------------------------------------------------- radius_y = circle_num(1); radius_x = circle_num(2); radius = circle_num(3); alpha=0:pi/20:2*pi;%角度[0,2*pi] R=radius; %半徑 %規整到圖的對應位置 x=R*cos(alpha)+radius_x; y=R*sin(alpha)+radius_y; hold on,plot(x,y)
最後把圓的引數和以前的那個圖畫在一起如下:
畫成這樣應該很準了吧,基本上貼近內圓了,再把它畫在原圖中可以看到:
至此內圓的檢測就完成了,當然其中有很多引數需要調整的,並且每一副圖對應的引數不太一樣,實驗還需要看效果調整。
相關推薦
虹膜識別(三):Hough變換檢測內圓邊緣
前面我們已經得到了hough變換的基礎條件,那就是有一個很好的用於檢測的二值邊緣影象如下所示: 至此我們才能運用hough變換。 Hough變換是一類廣泛用於檢測各種規則圖形用的,像直線、圓、橢圓等等,不同的就是檢測的規律不同。Hough變換的原理網上多得是,像http
數字影象處理筆記(三):使用OpenCV檢測影象特徵
1 - 引言 在數字影象處理中還提供了許多檢測影象簡單特徵的方法,例如邊緣檢測、輪廓檢測、直線檢測、圓檢測等。讓我們用OpenCV實現以下這些演算法吧 2 - Canny邊緣檢測 OpenCV提供了一個非常方便的Canny函式(以演算法的發明者命名) import cv2 i
架構漫談(三):如何做好架構之識別問題
答案 跟著 發生 做了 解決 長時間 一閃而過 開發 問題解決 按照之前架構的定義,做好架構首先需要做的就是識別出需要解決的問題。一般來說,如果把真正的問題找到,那麽問題就已經解決了80%了。這個能力基本上就決定了架構師的水平。 那麽面對問題有哪些困難呢? 我們先看一
岡薩雷斯:數字影象處理(三):第三章灰度變換與空間濾波(1)——基本灰度變換函式
一、前言 空間域指影象平面本身。這類影象處理方法直接以影象中的畫素操作為基礎。這是相對於變換域中的影象處理而言的。變換域的影象處理首先把一幅影象變換到變換域,在變換域中進行處理,然後通過反變換把處理結果返回到空間域 空間域處理主要分為灰度變換和空間濾波兩類。 灰度變換在影象的單個畫素上操
c語言數字影象處理(三):仿射變換
1 void bilinera_interpolation(short** in_array, short height, short width, 2 short** out_array, short out_height, short out
python3.5《機器學習實戰》學習筆記(三):k近鄰演算法scikit-learn實戰手寫體識別
轉載請註明作者和出處:http://blog.csdn.net/u013829973 系統版本:window 7 (64bit) 我的GitHub:https://github.com/weepon python版本:python 3.5 IDE:Spy
計算機視覺(三):目標檢測與識別
1 - 引言 目標檢測和識別,是計算機視覺最常見的挑戰之一。 目標檢測和識別的區別在於:目標檢測是用來確定影象的某個區域是否含有要識別的物件,而識別是程式識別物件的能力。識別通常只處理已檢測到物件的區域。 在計算機視覺中有很多目標檢測和識別的技術 梯度直方圖(Hist
Java多線程編程模式實戰指南(三):Two-phase Termination模式
增加 row throws mgr 額外 finally join table 還需 停止線程是一個目標簡單而實現卻不那麽簡單的任務。首先,Java沒有提供直接的API用於停止線程。此外,停止線程時還有一些額外的細節需要考慮,如待停止的線程處於阻塞(等待鎖)或者等待狀態(等
Spring(三):Spring整合Hibernate
ng- checkout wait 哪些 check driver eas package class 背景: 本文主要介紹使用spring-framework-4.3.8.RELEASE與hibernate-release-5.2.9.Final項目整合搭建
一個鹹魚的Python爬蟲之路(三):爬取網頁圖片
you os.path odin 路徑 生成 存在 parent lose exist 學完Requests庫與Beautifulsoup庫我們今天來實戰一波,爬取網頁圖片。依照現在所學只能爬取圖片在html頁面的而不能爬取由JavaScript生成的圖。所以我找了這個網站
淺談Kotlin(三):類
ide pos 中一 androi 文件 rri object 淺談 spa 淺談Kotlin(一):簡介及Android Studio中配置 淺談Kotlin(二):基本類型、基本語法、代碼風格 前言: 已經學習了前兩篇文章,對Kotlin有了一個基本的認識,往後
elastic-job詳解(三):Job的手動觸發功能
方法 idt image blog per tle cnblogs ack display elastic-job的任務都是使用quartz來觸發的,quartz表達式一般都是定期執行。但有時候一些周期較長的任務,比如一天一次,幾小時一次的任務,我們需要等待很久才能觸發一次
ASP.NET MVC5(三):表單和HTML輔助方法
http get 暴露 sta 選擇 .text 響應 pos 多行文本 二進制 表單的使用 Action和Method特性 Action特性用以告知瀏覽器信息發往何處,因此,Action特性後面需要包含一個Url地址。這裏的Url地址可以是相對的,也可以是絕對的。如
《Javascript高級程序設計》閱讀記錄(三):第五章 上
面向對象的語言 none 括號 數量 mas ie9 驗證 ive .so 這個系列以往文字地址: 《Javascript高級程序設計》閱讀記錄(一):第二、三章 《Javascript高級程序設計》閱讀記錄(二):第四章 這個系列,我會把閱讀《Jav
並發編程(三):從AQS到CountDownLatch與ReentrantLock
splay public 繼續 for admin font 通信 html integer 一、目錄 1、AQS簡要分析 2、談CountDownLatch 3、談ReentrantLock 4、談消費者與生產者模式(not
spring boot (三): 熱部署
pom.xml文件 添加 gin 字節 loader 信息 dev spring tool 介紹了Spring boot實現熱部署的兩種方式,這兩種方法分別是使用 Spring Loaded和使用spring-boot-devtools進行熱部署。 熱部署是什麽
TF-IDF與余弦相似性的應用(三):自動摘要
下一步 dip target 似的 abs tps .net ebo ace 轉:http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html 有時候,很簡單的數學方法,就可以完成很復雜的任務。 這個
Bootstrap入門(三):Less
樣式 ttr edi local 編輯 修改文件 方便 code b2c 很多時候我們需要定制Bootstrap的樣式,然後根制入門初步中,每次都定制網頁(http://v3.bootcss.com/customize/)生成我們需要的Css是一件很麻煩又不方便的事件。幸好
vue移動音樂app開發學習(三):輪播圖組件的開發
hub out webapp width eth reat slot utc -1 本系列文章是為了記錄學習中的知識點,便於後期自己觀看。如果有需要的同學請登錄慕課網,找到Vue 2.0 高級實戰-開發移動端音樂WebApp進行觀看,傳送門。 完成後的頁面狀態以及項目結構如
Vue2+VueRouter2+webpack 構建項目實戰(三):配置路由,運行頁面
margin not found sans product mage -a nod targe fig 制作.vue模板文件 通過前面的兩篇博文的學習,我們已經建立好了一個項目。問題是,我們還沒有開始制作頁面。下面,我們要來做頁面了。 我們還是利用 http://cno