halcon 圖像差分_Halcon編程-基于紋理的mara檢測

表面瑕疵檢測是機器視覺領域非常重要的一個應用。機器視覺是集光學、機電和計算機三個領域的一門不算新的技術。但目前表面瑕疵檢測在學界主要是計算機專業或者控制專業瞄準圖像處理方向在做,而視覺光學系統這一塊主要是光學工程專業在做。很少有研究者把這三塊都結合的很好,而國內做這機器視覺(注意是機器視覺 不是計算機視覺)基本上都是小公司。

軟件這一塊就不說了,國內的整體軟件環境不好。據我所知,日本、德國和美國在機器視覺方面有很多相對成熟的軟件。中國農業大學的陳兵旗教授在留日期間弄過很多機器視覺方面的農業機器人,同時他也寫過一本書介紹視覺圖像處理,后面還附錄了他們自己主推的軟件。德國的軟件就是下面要介紹的halcon。提到halcon就有必要和開源的opencv進行對比,opencv在圖像處理方面也是小有名氣,但是其成型的圖像模塊函數并不多,而且由于是開源,并沒有專門對各種圖像處理領域方面的檢測需求進行擴展,還是那句話,畢竟是開源。

halcon是商業軟件,國內主要是大恒公司在代理,其在圖像處理方面,特別是檢測測量方面有很多優勢。下面我以一個例子在介紹halcon圖像算法開發過程。

啟動軟件,ctrl+E彈出例程,選擇表面檢測中的detect_mura_defects_texture 。這個是液晶面板上的mura 損傷 。附錄上張存在損傷的圖像

在雜亂的紋理上出現的黑色區域就是損傷。如何檢測呢?

代碼如下:

* this example shows how to detect mura defects

* in highly textured images

*

dev_close_window ()

dev_update_off ()

Path := 'lcd/mura_defects_texture_'

read_image (Image, Path+'01')

get_image_size (Image, Width, Height)

dev_open_window (0, 0, 640, 480, 'black', WindowHandle)

set_display_font (WindowHandle, 14, 'courier', 'true', 'false')

dev_set_draw ('margin')

dev_set_line_width (3)

dev_set_color ('red')

for f := 1 to 2 by 1

read_image (Image, Path+f$'.2i')

decompose3 (Image, R, G, B)

* defects are characterized by dark patches. Hence, by substracting the

* estimated background illumination from the original image the

* defects become more apparent

estimate_background_illumination (B, ImageFFT1)

sub_image (B, ImageFFT1, ImageSub, 2, 100)

* median filter smooths out the fine texture, simplifying the following

* segmentation and final detection of defects

median_image (ImageSub, ImageMedian, 'circle', 9, 'mirrored')

watersheds_threshold (ImageMedian, Basins, 20)

* dark patches corresponding to defects have a very low energy

cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)

tuple_find (sgn(Energy-0.05), -1, Indices)

select_obj (Basins, Defects, Indices+1)

*

dev_display (Image)

dev_display (Defects)

count_obj (Defects, NDefects)

disp_message (WindowHandle, NDefects+' \'mura\' defects detected', 'window', -1, -1, 'red', 'true')

if (f < 2)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

endif

endfor

1對彩色圖像進行R G B分解,選取B作為后續圖像。這個原因是通過實驗處理的,在B圖像下黑色斑和背景差異最大吧。

2 生成背景模板,將圖像傅里葉變換到頻域中,通過高斯濾波,然后傅里葉反變換回來,得到的圖像就是背景模板

3 背景差分。采用以下函數,增強兩幅圖像的差異

sub_image?( ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )

ImageSub=(ImageMinuend-ImageSubtrahend)*Mult+Add

4 分水嶺算法分割,在分割之前采用中值濾波來抑制小斑點或細線。分水嶺后,圖像分割為多個輪廓(region)。

5 計算多個輪廓region的灰度信息,包括能量。相關度、同一度、對比度,通過灰度共生矩陣。 前面的兩個參數是灰度級和方向,灰度級是2^,方向即灰度共生矩陣方向。

6 根據能量信息對多個region進行篩選,篩選后的region就是檢測結果。

Halcon::tuple_find ((Energy-0.05).Sgn(), -1, &Indices);

image_opencv_test=m_ip->HImageToIplImage(m_hoImage);

int number=Indices.Num();

for (int i=0;i

{

Halcon::HTuple new_Indices;

new_Indices[0]=Indices[i].I()+1;

Halcon::select_obj (Basins, &Defects, new_Indices);

Hlong x1,x2,y1,y2;

Halcon::smallest_rectangle1(Defects,&y1,&x1,&y2,&x2);

cvRectangle(image_opencv_test,cvPoint(x1,y1),cvPoint(x2,y2),cvScalar(0,0,255),2,8,0);

}

判斷能量是否大于0.05,通過sgn函數將大于0.05的置1,小于的置-1。通過find

在(Energy-0.05).Sgn()中尋找-1出現的位置,注意這個位置是從0開始的。貌似這個是經過人為排序的,所以indices 中就是前三個 0 1 2

select_obj (Basins, &Defects, new_Indices);是從Basins提取序號為new_Indices的region 。為什么重新定義一個HTuple 因為HTuple實際上是個數組。find后得到的就是一個indices 數組,里面存在三個數。

select_obj?的參數必須是HTuple,也就是數組,所以只能重新定義,而且序號從1開始,因此要加1,只能獲取數組中的值加1,

獲取的代碼為new_Indices[0]=Indices[i].I()+1; 也就是說數組中的值可以直接訪問,然后轉化為需要的類型。

這是我弄的比較笨的方法,直接通過halcon轉化c++代碼,只有一句。我覺得還是單個取出來比較靠譜。

貼一個檢測結果吧:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Camel入門

在先前的博文中&#xff0c;我們了解了企業集成模式&#xff08;EIP&#xff09;。 現在&#xff0c;在這篇文章中&#xff0c;我們將研究實現這些模式的Apache Camel框架。 關于駱駝&#xff1a; Apache Camel是一個開放源代碼項目&#xff0c;已有將近5年的歷史&#xff0c;…

css 寫打印樣式問題

&#xff08;1&#xff09;背景顏色打印不出來問題解決方法 background樣式要加上 !important&#xff1b;color樣式要加上 !important&#xff1b;-webkit-print-color-adjust: exact;然后記得瀏覽器打印設置里面要在“打印背景圖形”前面打勾。 -webkit-print-color-adjust:…

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申請Mob的appkey與appsecret2.在Mob官網下載最新SDK&#xff0c;解壓后會看到以下目錄結構&#xff1a;SMSSDK下存放的是短信SDK的全部內容。3.在android studio中加入SMS的第三方庫AS版本的SMSSDK目錄下包含以下內容&#xff1a;MobCommons.jar&#xff1a;Mob …

linux后臺不掛斷運行 nohup命令

//后臺常在 退出終端仍然運行 nohup python pyredis.py & nohup輸出重定向到my.log nohup command > my.log 2>&1 &轉載于:https://www.cnblogs.com/plxm/p/8136833.html

Ubuntu 16.04安裝微信

微信沒有出Linux的版本&#xff0c;但是可以通過以下方式解決&#xff1a; 1、使用網頁版&#xff0c;除了沒有公眾號之后&#xff0c;一切都沒問題&#xff0c;包括傳文件等。 網頁登錄地址&#xff1a;https://wx.qq.com/ 2、使用第三方版本&#xff0c;只不過這個是桌面應用…

navision系統和sap區別_SAP那些事-實戰篇-89-淺談金稅接口方案

以前金稅接口這塊一直是銷售顧問在做&#xff0c;雖然和財務相關&#xff0c;也沒有怎么關注。這次項目把金稅接口分到了財務模塊&#xff0c;結果遇到了一些問題&#xff0c;趁此機會把這塊總結一下方案&#xff0c;供各位看官參考。方案1&#xff1a; 文本方案&#xff0c;這…

不變性的來龍去脈

因此&#xff0c;在我的第一篇文章中&#xff0c;我談到了一些構建器模式&#xff0c;并提到了一個非常強大但卻被忽視的概念&#xff1a;不變性。 什么是不可變類&#xff1f; 這只是一個其實例無法修改的類。 類屬性的每個值都在其聲明或其構造函數中設置&#xff0c;并在對…

JavaScript總結(3)

第3章 獲取用戶的輸入 &#xff1c;script&#xff1e;10 intAprompt("請輸入第一個數字","");11 intBprompt("請輸入第二個數字",27);默認是2712 document.write("你輸入的第一個數字是"intA);13 document.write("&#xff1c;…

css書寫規范

在書寫css樣式的時候總是無意中就寫亂了&#xff0c;無論是命名或者是樣式的書寫順序&#xff0c;這里做一個總結&#xff0c;提醒自己在書寫css的時候時刻注意&#xff0c;大家可以參考哈。 1. 樣式屬性順序 單個樣式規則下的屬性在書寫時&#xff0c;應按功能進行分組&…

android 協程,關于android:Kotlin協程實現原理SuspendCoroutineContext

明天咱們來聊聊Kotlin的協程Coroutine。如果你還沒有接觸過協程&#xff0c;舉薦你先瀏覽這篇入門級文章What? 你還不曉得Kotlin Coroutine?如果你曾經接觸過協程&#xff0c;置信你都有過以下幾個疑難&#xff1a;協程到底是個什么貨色&#xff1f;協程的suspend有什么作用&…

清空easyui checkbox選中項

$(#dg).datagrid(unselectAll);轉載于:https://www.cnblogs.com/douhuan/p/7116744.html

python 編輯excel需要什么包_Python 中操作EXCEL表格的包

今天&#xff0c;馬云爸爸又來貢獻金句了&#xff0c;比王健林公公一億一個小目標還高&#xff0c;“一個月掙一二十個億很難受&#xff01;&#xff01;&#xff01;”&#xff0c;作為在傳統企業主要為電商部門提供數據分析的數據分析師&#xff0c;體驗太深刻了。雙11前后&a…

用Java處理大文件

最近&#xff0c;我不得不處理一組包含逐筆歷史匯率市場數據的文件&#xff0c;并很快意識到使用傳統的InputStream都無法將它們讀取到內存中&#xff0c;因為每個文件的大小都超過4 GB。 Emacs甚至無法打開它們。 在這種特殊情況下&#xff0c;我可以編寫一個簡單的bash腳本&…

java IO(一):File類

1.File類簡介 File類位于java.io包中。它面向文件層次級別操作、查看文件&#xff0c;而字節流、字符流操作數據時顯然比之更底層。 學習File類包括以下幾個重點&#xff1a;文件路徑、文件分隔符、創建文件(目錄)、刪除文件(目錄)、查看文件內容(輸出目錄內文件)、判斷文件(是…

android listview 開發,android開發之ListView實現

今天又初步學習了一下ListView控件&#xff0c;看看效果如下&#xff1a;LisViewActivity.java源碼&#xff1a;package com.jinhoward.UI_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundl…

input ios問題 小程序_微信小程序開發常見問題匯總

原標題&#xff1a;微信小程序開發常見問題匯總1、域名必須是https非https的域名不被微信小程序允許。2、input組件placeholder字體顏色卸載placeholder-class里面的color并不生效&#xff0c;需要寫在placeholder-style里面就可以了。3、wx.navigateTo無法跳轉到帶tabbar的頁面…

https://github.com/

https://github.com/ qq郵箱 轉載于:https://www.cnblogs.com/chang1/p/7133251.html

Less 的用法

1. node.js node.js是一個前端的框架 自帶一個包管理工具npm node.js 的安裝 官網&#xff1a;http://nodejs.cn/ 在命令行檢驗是否安裝成功 切換到項目目錄&#xff0c;初始化了一個package.json文件 安裝與卸載jQuery包&#xff08;例子&#xff09; 安裝 卸載 安裝淘寶…

淺談springboot整合ganymed-ssh2遠程訪問linux

環境介紹 技術棧 springbootmybatis-plusmysqlganymed-ssh2 軟件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 SSH(遠程連接工具)連接原理&#xff1a;ssh服務是一個守護進程(demon)&#xff0c;系統后臺監聽客戶…

優化Neo4j Cypher查詢

上周&#xff0c;我花了很多時間嘗試使用實時系統中的數據來優化大約20個執行失敗的Cypher查詢&#xff08;36866ms至155575ms&#xff09;。 經過一番嘗試和錯誤&#xff0c;以及來自Michael的大量投入&#xff0c;我能夠大致確定對查詢進行哪些操作才能使它們性能更好-最后&a…