4 圖像區域有關操作

4 圖像區域有關操作

4.1 全局閾值分割介紹

4.1.1 知識點

在這裏插入圖片描述
備註(Ctrl+鼠標查看灰度值,使用灰度直方圖查看閾值)(連通域操作可以使得區域保持獨立)

4.1.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*閾值算子
threshold (GrayImage, Regions, 247, 255)
*閾值算子,多了一個面積影響因子爲20
fast_threshold (GrayImage, Region, 247, 255, 60)
*連通域算子
connection (Region, ConnectedRegions)

4.2.1動態閾值分割介紹知識點在這裏插入圖片描述

4.2.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*均值濾波和動態閾值分割相結合
mean_image (GrayImage, ImageMean, 60, 60)
dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 105, 'light')
*動態閾值分割一步到位
local_threshold (GrayImage, Region, 'adapted_std_deviation', 'light', [], [])

4.3其他閾值分割

4.3.1 知識點

在這裏插入圖片描述

4.3.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*自動閾值分割
auto_threshold (GrayImage, Regions, 25)
*二值化閾值分割
binary_threshold (GrayImage, Region, 'max_separability', 'light', UsedThreshold)
*分水嶺閾值分割
watersheds_threshold (GrayImage, Basins, 5)

4.4 形態學介紹

4.4.1 形態學膨脹介紹知識點

在這裏插入圖片描述

4.5.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*閾值分割
threshold (GrayImage, Region, 128, 255)
*圓形膨脹(使用在文字填補上)
dilation_circle (Region, RegionDilation, 3.5)
*矩形膨脹(長度方向膨脹)
dilation_rectangle1 (RegionDilation, RegionDilation1, 1, 11)
*寬度方向膨脹
dilation_rectangle1 (RegionDilation, RegionDilation1, 11, 1)

4.6 形態學腐蝕介紹

4.6.1 知識點

在這裏插入圖片描述

4.6.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*閾值分割
threshold (GrayImage, Region, 128, 255)
*圓形腐蝕
erosion_circle (Region, RegionErosion, 3.5)
*矩形腐蝕
erosion_rectangle1 (RegionErosion, RegionErosion1, 11, 11)
*灰度腐蝕,會變暗
gray_erosion_rect (GrayImage, ImageMin, 11, 11)
*灰度膨脹,會變亮
gray_dilation_rect (GrayImage, ImageMax, 11, 11)
*腐蝕和膨脹的最好用法:邊緣檢測
dilation_circle (Region, RegionDilation, 1.5)
erosion_circle (Region, RegionErosion2, 1.5)
difference (RegionDilation, RegionErosion2, RegionDifference)

4.7 形態學開閉運算

4.7.1 形態學知識點

在這裏插入圖片描述

4.7.2 程序代碼

dev_open_file_dialog ('read_image', 'default', 'default', Selection)
read_image (Image, Selection)
rgb1_to_gray (Image, GrayImage)
*閾值分割
threshold (GrayImage, Region, 128, 255)
*開運算(圓形和矩形)
* opening_circle (Region, RegionOpening, 3.5)
* opening_rectangle1 (Region, RegionOpening1, 10, 10)
*閉運算(圓形和矩形)
closing_circle (Region, RegionClosing, 3.5)
*連通域
connection (RegionClosing, ConnectedRegions)
* closing_rectangle1 (Region, RegionClosing1, 10, 10)
*灰度圖像開運算
* gray_opening_rect (GrayImage, ImageOpening, 11, 11)
* gray_closing_rect (ImageOpening, ImageClosing, 11, 11)
*求交集
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
intersection (Rectangle, Region, RegionIntersection)

4.8 區域操作

4.8.1 知識點

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.8.2 程序代碼

*畫矩形
gen_rectangle1 (Rectangle, 120, 200, 160, 390)
*畫矩形1
gen_rectangle1 (Rectangle1, 120+20, 200+20, 160-10, 390-10)
*矩形做差
difference (Rectangle, Rectangle1, RegionDifference)
*矩形合併
union2 (RegionDifference, Rectangle1, RegionUnion)
*矩形組成集合
concat_obj (Rectangle, Rectangle1, ObjectsConcat)
*選擇幾何單元
select_obj (ObjectsConcat, ObjectSelected, 2)
*填充幾何
fill_up (RegionDifference, RegionFillUp)
*根據面積大小填充幾何
fill_up_shape (RegionDifference, RegionFillUp1, 'area', 1, 9999)
*骨架算子
skeleton (RegionFillUp1, Skeleton)
*(幾何合併union1)

4.9 區域的特徵分析

4.9.1 知識點

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.9.2 程序代碼

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*畫原型區域
draw_region (Region, WindowHandle)
*用來顯示區域的塗鴉還是隻有輪廓
dev_set_draw ('margin')
*最小外接圓
smallest_rectangle2 (Region, Row, Column, Phi, Length1, Length2)
*繪製最小外接圓
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*最小外接圓1
smallest_rectangle1 (Region, Row1, Column1, Row2, Column2)
*繪製外接圓1
gen_rectangle1 (Rectangle1, Row1, Column1, Row2, Column2)
*繪製區域的凸性圓
shape_trans (Region, RegionTrans, 'convex')
*求區域的凸性大小
convexity (RegionTrans, Convexity)
*求區域的圓度大小
circularity (RegionTrans, Circularity)
*繪製圓形區域
gen_circle (Circle, Row, Column, 10.5)
*求圓的圓度
circularity (Circle, Circularity1)
*求區域最小外接圓
smallest_circle (Region, Row3, Column3, Radius)
*繪製最小外接圓
gen_circle (Circle1, Row3, Column3, Radius)
*求特徵參數(面積等)
region_features (Circle1, 'area', Value)
*組合集合
concat_obj (Region, Circle1, ObjectsConcat)
*求集合的數量
count_obj (ObjectsConcat, Number)
*篩選區域
select_shape (ObjectsConcat, SelectedRegions, 'area', 'and', 85222, 99999)

4.10 字符提取並計算字符面積

4.10.1 知識點

在這裏插入圖片描述

4.10.2 程序代碼

read_image (Image, 'E:/halcon/素材.jpg')
rgb1_to_gray (Image, GrayImage)

threshold (GrayImage, Region, 150, 255)
*區域開運算
*opening_circle (Region, RegionOpening, 3.5)
*連通域操作,可以劃分區域
connection (Region, ConnectedRegions)
*根據面積最大選擇
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*填充(必須的)
fill_up (SelectedRegions, RegionFillUp)
*裁剪
reduce_domain (GrayImage, RegionFillUp, ImageReduced)
*快速閾值分割
fast_threshold (ImageReduced, Region1, 0, 100, 20)
*水平旋轉
orientation_region (Region1, Phi)
area_center (Region1, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, -3.14/2, HomMat2D)
affine_trans_region (Region1, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
*膨脹,去掉逗號
closing_circle (RegionAffineTrans, RegionClosing, 3.5)
dilation_rectangle1 (RegionClosing, RegionDilation, 1, 11)
connection (RegionDilation, ConnectedRegions1)
*篩選
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 150, 99999)
*求交集
intersection (SelectedRegions1, RegionAffineTrans, RegionIntersection)

*選擇不合格的字符
select_shape (RegionIntersection, SelectedRegions2, 'rect2_len1', 'and', 30, 999)

*把不合格的變成合格,重新膨脹和連通域操作設置
closing_circle (SelectedRegions2, RegionClosing1, 1.5)
dilation_rectangle1 (RegionClosing1, RegionDilation1, 1, 11)
connection (RegionDilation1, ConnectedRegions2)
*求交集
intersection (ConnectedRegions2, SelectedRegions2, RegionIntersection1)
*建立空集
gen_empty_obj (EmptyObject)
concat_obj (EmptyObject, RegionIntersection1, ObjectsConcat)
*將去除不合格的也放進去
*先去除不合格
difference (RegionIntersection, SelectedRegions2, RegionDifference)
*放進去
concat_obj (RegionDifference, ObjectsConcat, ObjectsConcat1)
*計算字符面積
count_obj (ObjectsConcat1, Number)
a:=[]
for Index := 1 to Number by 1
    select_obj (ObjectsConcat1, ObjectSelected, Index)
    area_center (ObjectSelected, Area1, Row1, Column1)
    a:=[a,Area1,'\t']
endfor
*新建txt文檔
open_file ('1.txt', 'output', FileHandle)
fwrite_string (FileHandle, a)
close_file (FileHandle)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章