日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Halcon学习之缺陷检测-凸点检测

發布時間:2023/12/18 ChatGpt 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Halcon学习之缺陷检测-凸点检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路讀取圖片--》圖片轉化為灰度---》快速傅里葉變換把圖像轉到頻域---》頻域濾波器進行卷積---》快速傅里葉反變換---》用一個矩形掩膜計算像素點的灰度范圍---》求圖片灰度值的最大和最小值和變換范圍---》利用全局閾值對圖像進行分割---》連通區域---》根據面積篩選區域---》合并區域---》使用圓形元素對區域進行閉運算---》連通區域---》根據面積篩選區域---》計算區域的面積以及中心位置---》顯示結果

例程:detect_indent_fft.hdev

說明:這個程序展示了如何利用快速傅里葉變換(FFT)對塑料制品的表面進行目標(缺陷)的檢測,大致分為三步:

首先,我們用高斯濾波器構造一個合適的濾波器(將原圖通過高斯濾波器濾波);

然后,將原圖和構造的濾波器進行快速傅里葉變換;

最后,利用形態學算子將缺陷表示在濾波后的圖片上(在缺陷上畫圈)。

:代碼中綠色部分為個人理解和注釋,其余為例程中原有代碼

*Initialization(初始化) dev_updata_off() //這一句包含如下三個算子: //dev_updata_pc(‘off’) 關閉更新程序計數器 //dev_updata_var(‘off’) 關閉更新變量窗口 //dev_updata_window(‘off’) 關閉更新圖像窗口(即通過命令來顯示想要在圖像窗口顯示的圖片) dev_close_window() //關閉活動的圖像窗口 read_image(Image,’plastics / plastics_01’) //載入圖片 //參數說明:為讀入圖片命名(Image) // 文件名(’plastics/plastics_01’) get_image_size(Image,Width,height) //獲取圖片的長寬; //參數說明:之前讀入或生成的圖片(Image) // 圖片的寬(Width) // 圖片的高(Height) dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打開一個新的圖像窗口 //參數說明:起始坐標(0,0) // 大小(Width,Height) // 背景顏色(’Black’) // 窗口句柄(WindowHandle) set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//設置不依賴操作系統的字體 //參數說明:窗口句柄(WindowHandle) // 字體大小(14) // 字體類型(’mono’) // 是否黑體(’ture’) // 是否傾斜(’false’) dev_set_draw(‘Margin’) //定義區域填充模式 //參數說明:填充模式(’Margin’或者’Fill’)dev_set_line_width(3) //設置輸出區域輪廓線的線寬//可以修改參數來看最后缺陷區域標示的區別 dev_set_color(’red’) //設置一種或者多種輸出顏色* *Optimize the fft speed for the specific image size(根據指定圖像大小進行fft速度最優化) optimize_rft_speed(Width,Height,’standard’) //對指定大小的圖片的fft速度進行優化 //參數說明:圖片大小(Width,Height) // 優化模式(’standard’)* *Construct a suitable filter by combining two Gaussian filters(結合兩個高斯濾波器構造一*個合適的濾波器) Sigma1 := 10.0 Sigma2 := 3.0 //定義兩個常量 gen_gauss_filter(GaussFilter1,Sigma1,Sigma1,0.0,’none’,’rft’,Width,Height) gen_gauss_filter(GaussFilter2,Sigma2,Sigma2,0.0,’none’,’rft’,Width,Height) //在頻域生成兩個高斯濾波器 //參數說明:生成的高斯濾波器(GaussFilter) // 空域中高斯在主方向上的標準差(Sigma) // 空域中高斯在正交于主方向的方向上的標準差(Sigma) // 濾波器主方向的角度(0.0) // 濾波器的規范(’none’) // 直流項在頻域的位置(’rft’) // 圖片的大小(Width,Height) sub_image(GaussFilter1,GaussFilter2,Filter,1,0) //兩圖片相減(灰度) //sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : ) //g' := (g1 - g2) * Mult + Add //以上為函數原型以及運算公式* *Process the images iteratively(對圖像進行迭代運算) NumImages := 11 For Index := 1 to NumImages by 1 //for循環從1到NumImages,步長為1**Read an image and convert it to gray valuesread_image(Image,’plastics/plastics_’+Index$’02’)rgb1_to_gray(Image,Image) //將原圖轉化為灰度圖,第一個參數為原圖*Perform the convolution in the frequency domainrft_generic(Image,ImageFFT,’to_freq’,’none’,’complex’,Width)//對計算一幅圖片實部進行快速傅里葉變換//參數說明:輸入的圖片(Image)// 傅里葉變換后輸出的圖片(ImageFFT)// 變換方向(’to_freq’或’from_freq’)// 變換因子的規范(’none’)// 輸出圖片的數據類型(’complex’)// 圖片的寬(Width)convol_fft(ImageFFT,Filter,ImageConvol) //對圖片用一個濾波器在頻域進行卷積運算//參數說明:輸入的圖片(ImageFFT)// 頻域濾波器(Filter)// 運算后輸出的結果rft_generic(ImageConvol,ImageFiltered,’from_freq’,’n’,’real’,Width) //對濾波后的圖片進行傅里葉反變換**Process the filtered imagegray_range_rect(ImageFiltered,ImageResult,10,10)//用一個矩形掩膜計算像素點的灰度范圍//參數說明:輸入的圖片(ImageFiltered)// 輸出的灰度范圍圖(ImageResult)// 矩形掩膜大小(10,10)min_max_rect(ImageResult,ImageResult,0,Min,Max,Range)//判斷區域內灰度值的最大和最小值//參數說明:待分析圖片區域(ImageResult)// 圖片(ImageResult)// 被去除的直方圖兩邊像素點所// 占總像素數的百分比(0)// 得到的最小值最大值及灰度值范圍(Min,Max,Range)threshold(ImageResult,RegionDynThresh,max([5.55,Max*0.8]),255)//利用全局閾值對圖像進行分割//參數說明:輸入的圖片(ImageResult)// 分割后得到的區域(RegionDynThresh)// 閾值(max([5.55,Max*0.8]),255)// 公式:MinGray <= g <= MaxGrayconnection(RegionDynThresh,ConnectedRegions) //計算區域內的連通部分//參數說明:輸入的圖片(RegionDynThresh)// 得到的連通區域(ConnectedRegions)select_shape (ConnectedRegions,SelectedRegions,’area’,’and’,4,99999)//根據指定的形態特征選擇區域//參數說明:輸入的圖片(ConnectedRegions)// 滿足條件的區域(SelectedRegions)// 將要計算的形態特征(’area’)// 獨立特征間的連接關系(’and’)// 特征的最小限制(4)// 特征的最大限制(99999)union1(SelectedRegions,RegionUnion) //返回包含所有區域的集合//參數說明:包含所有區域的待計算區域的圖片(tedRegions)// 所有輸入區域合(RegionUnion)closeing_circle(RegionUnion,RegionClosing,10)//用一個圓圈來封閉一個區域//參數說明:將要被封閉的區域(RegionUnion)// 被封閉的區域(RegionClosing)// 圓圈的半徑(10)connection(RegionClosing,ConnectedRegions1)select_shape(ConnectedRegions1,SelectedRegions1,’area’,’and’,10,99999)area_center(SelectedRegions1,Area,Row,Column) //計算區域的面積以及中心位置//參數說明:待計算的區域(SelectedRegions1)// 區域的面積(Area)// 區域中心的行(Row)// 區域中心的列(Column)**Display the resultsdev_display(Image) //顯示原圖Number := |Area| //將區域面積賦給Number用于后面檢查是否存在缺陷if(Number)gen_circle_contour_xld(ContCircle,Row,Column,gen_tuple_const(Number,30),gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)),’positive’,1)//構造一個與設定的圓弧或圓相一致的邊界//參數說明:生成的邊界(ContCircle)// 圓弧或圓的中心坐標(Row,Cloumn)// 圓弧或圓的半徑(gen_tuple_const(Number,30))// 圓弧或圓的起始角度(gen_tuple_const(Number,0))// 圓弧或圓的結束角度(gen_tuple_const(Number,rad(360)))// 不明白是什么意思// 相鄰兩點間的距離(1)ResultMessage := [‘Not OK’,Number + ‘defect(s) found’]Color := [‘red’,’black’]dev_display(ContCircle)elseResultMessage := ‘OK’Color := ‘forest green’endifdisp_message(WindowHandle,ResultMessage,’window’,12,12,Color,’ture’)if(Index#NumImages)disp_continue_message(WindowHandle,’black’,’ture’)stop()endif endfor

總結

以上是生活随笔為你收集整理的Halcon学习之缺陷检测-凸点检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。