天天看點

Halcon極坐标轉換,圖文解說,含點坐标的轉換

極坐标的用途

把圓形的圖檔轉換為矩形,便于字元識别和關鍵區域的提取。

在halcon中對應的算子

(1)極坐标的展開:polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

(2)極坐标的逆變換:polar_trans_image_inv(PolarImage : XYTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

其中:Row, Column分别為圓環的中心行列坐标, AngleStart, AngleEnd為起始和終止的角度值,RadiusStart, RadiusEnd為起始和終止的半徑角度值, Width, Height為輸出圖檔的寬和高。

(3)點坐标的逆變換:polar_trans_contour_xld_inv(PolarContour : XYTransContour : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WidthIn, HeightIn, Width, Height : )

我寫的案例

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, '極坐标2.png')
get_image_size (Image, Width, Height)
draw_circle (WindowHandle, Row1, Column1, Radius)
gen_circle (Circle, Row1, Column1, Radius)
reduce_domain (Image, Circle, ImageReduced)
PI:=3.1415926
*逆時針,從0度到360度,轉一圈
polar_trans_image_ext (ImageReduced, PolarTransImage, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, 'nearest_neighbor')
write_image (PolarTransImage, 'jpeg 100', 0, 'd:\\1.jpg')
*長和寬必須是原圖像的長和寬,否則尺寸太小的話,圖像容易超出,導緻一片黑,看不到轉換結果
polar_trans_image_inv (PolarTransImage, XYTransImage, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, 'nearest_neighbor')
write_image (XYTransImage, 'jpeg 100', 0, 'd:\\2.jpg')
*點坐标的轉換
*Contour的原坐标是基于極坐标系,我們把它轉到笛卡爾坐标系
gen_contour_polygon_xld (Contour, [155.568, 137.404, 30], [47.4712, 116.479, 260])
polar_trans_contour_xld_inv (Contour, XYTransContour, Row1, Column1, 0, 2*PI, 0, Radius, Width, Height, Width, Height)
stop()      

變換前:

Halcon極坐标轉換,圖文解說,含點坐标的轉換

變換後:

Halcon極坐标轉換,圖文解說,含點坐标的轉換

逆變換:會回原樣

官方例程

ocr_cd_print_polar_trans.hdev

create_shape_model_xld.hdev

circular_barcode.hdev

參考文獻

https://blog.csdn.net/qq_32939413/article/details/104092627 https://www.pianshen.com/article/3946344220/

繼續閱讀