分割出四个角点做投影应该就差不多了吧,尝试一下:
- read_image (Image, 'D:/标定板图像畸变校正.png')
- rgb1_to_gray (Image, GrayImage)
- binary_threshold (GrayImage, Region, 'max_separability', 'dark', UsedThreshold)
- connection (Region, ConnectedRegions)
- select_shape (ConnectedRegions, SelectedRegions, 'circularity', 'and', 0.65, 1)
- select_shape_std (SelectedRegions, MaxRegions, 'max_area', 70)
- region_features (MaxRegions, 'max_diameter', MaxDiameter)
- region_features (SelectedRegions, 'row', RowX)
- region_features (SelectedRegions, 'column', ColX)
- MinRow := min(RowX)
- MinCol := min(ColX)
- MaxRow := max(RowX)
- MaxCol := max(ColX)
- select_shape (SelectedRegions, SelectedRegionsTL, ['row', 'column'], 'and', [0,0], [MinRow+1.5*MaxDiameter, MinCol+1.5*MaxDiameter])
- select_shape (SelectedRegions, SelectedRegionsTR, ['row', 'column'], 'and', [0,MaxCol-1.5*MaxDiameter], [MinRow+1.5*MaxDiameter,99999])
- select_shape (SelectedRegions, SelectedRegionsBL, ['row', 'column'], 'and', [MaxRow-1.5*MaxDiameter,0], [99999,MinCol+1.5*MaxDiameter])
- select_shape (SelectedRegions, SelectedRegionsBR, ['row', 'column'], 'and', [MaxRow-1.5*MaxDiameter,MaxCol-1.5*MaxDiameter], [99999,99999])
- area_center (SelectedRegionsTL, Area, RowTL, ColTL)
- area_center (SelectedRegionsTR, Area, RowTR, ColTR)
- area_center (SelectedRegionsBL, Area, RowBL, ColBL)
- area_center (SelectedRegionsBR, Area, RowBR, ColBR)
- Px := [RowTL, RowTR, RowBR, RowBL]
- Py := [ColTL, ColTR, ColBR, ColBL]
- distance_pp (RowTL, ColTL, RowTR, ColTR, Distance)
- Qx := [RowTL, RowTL, RowTL+Distance, RowTL+Distance]
- Qy := [ColTL, ColTL+Distance, ColTL+Distance, ColTL]
- hom_vector_to_proj_hom_mat2d (Px, Py, [1,1,1,1], Qx, Qy, [1,1,1,1], 'normalized_dlt', HomMat2D)
- projective_trans_image (GrayImage, TransImage, HomMat2D, 'bilinear', 'true', 'true')
复制代码 |