read_image (Image, 'circle.bmp') get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'black', WindowHandle) dev_display (Image) dev_set_colored (12) threshold (Image, Region, 128, 255) closing_circle (Region, RegionClosing, 9) fill_up_shape (RegionClosing, RegionFillUp, 'area', 1, 500) erosion_circle (RegionFillUp, RegionErosion, 9) * gray_erosion_rect (Image, Image, 3, 3) reduce_domain (Image, RegionErosion, ImageReduced) mean_image (ImageReduced, ImageMean, 7, 7) dyn_threshold (Image, ImageMean, RegionDynThresh, 15, 'dark') connection (RegionDynThresh, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10, 99999) hough_lines (RegionDynThresh, 4, 300, 5, 5, Angle, Dist) gen_region_hline (Regions, Angle, Dist) SortAngle := sort(Angle) BestAngle := SortAngle[|SortAngle|/2] hom_mat2d_identity (HomMat2DIdentity) hom_mat2d_rotate (HomMat2DIdentity, rad(90)+BestAngle, Height/2, Width/2, HomMat2DRotate) affine_trans_image (Image, ImageAffinTrans, HomMat2DRotate, 'constant', 'false') mean_image (ImageAffinTrans, ImageMean1, 22, 1) mean_image (ImageMean1, ImageMean2, 9, 9) dyn_threshold (ImageMean1, ImageMean2, RegionDynThresh2, 10, 'dark') connection (RegionDynThresh2, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions1, 'anisometry', 'and', 12, 100) dev_set_draw ('margin') dev_clear_window () dev_display (ImageAffinTrans) dev_display (SelectedRegions1)