- dev_close_window ()
- *učitava sliku i određuje dimenzije
- read_image (Image, 'plus/p_00')
- get_image_size (Image, Width, Height)
- *otvara prozor te prikazuje učitanu sliku
- dev_open_window (0, 510, Width, Height, 'black', WindowHandle)
- dev_open_window (0, 0, Width, Height, 'black', WindowHandle1)
- dev_update_off ()
- set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
- dev_set_window(WindowHandle1)
- dev_display (Image)
- disp_message (WindowHandle1, 'Model Image', 'window', 12, 12, 'black', 'true')
- dev_set_window(WindowHandle)
- *određuje regije koje odgavaraju određenom stupnju sive boje
- threshold (Image, Region, 200, 'max')
- fill_up (Region, RegionFillUp)
- difference (RegionFillUp, Region, RegionDifference)
- *stvara područje oko odabrane regije
- shape_trans (RegionDifference, LogoArea, 'convex')
- dilation_circle (LogoArea, LogoArea, 5)
- *smanjuje domenu slike na regiju koju promatramo
- reduce_domain (Image, LogoArea, ImageReduced)
- *stvara model za prepoznavanje oblika
- create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ShapeModelID)
- *sprema koordinate regije
- area_center (LogoArea, Area, ModelRow, ModelColumn)
- edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 10, 20)
- *Cijeli gornji 'trik' se može zamijeniti naredbom sobel_amp koja detektira rubove - razlika je u preciznosti
- sobel_amp (ImageReduced, EdgeAmplitude, 'sum_sqrt', 5)
- *Detektirani rubovi se izglađuju binomnim filtrom te se stvara varijacijski model za
- *kasnije pronalaženje razlika između modela i slike
- binomial_filter (EdgeAmplitude, VarImage, 3, 3)
- create_variation_model (Width, Height, 'byte', 'direct', VarModelID)
- prepare_direct_variation_model (Image, EdgeAmplitude, VarModelID, 15, 4)
- dev_display (VarImage)
- disp_message (WindowHandle, 'Variation Image', 'window', 12, 12, 'black', 'true')
- disp_continue_message (WindowHandle, 'black', 'true')
- stop ()
- * provjerava slike
- for i := 1 to 24 by 1
- dev_clear_window()
- read_image (Image, 'plus/p_' + i$'02d')
- *pronalazi model na trenutnoj slici
- find_shape_model (Image, ShapeModelID, -rad(50), rad(360), 0, 1, 0.5, 'least_squares', 0, 0, Row, Column, Angle, Score)
- dev_set_window(WindowHandle1)
- dev_display (Image)
- disp_message (WindowHandle1, 'Current Image', 'window', 12, 12, 'black', 'true')
- dev_set_window(WindowHandle)
- if (|Score| != 0)
- *izračunava matricu transformacije te transformira sliku da odgovara položaju modela
- vector_angle_to_rigid (Row, Column, Angle, ModelRow, ModelColumn, 0, HomMat2D)
- affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
- *Smanjuje domenu na kojoj pretražuje
- reduce_domain (ImageAffineTrans, LogoArea, ImageReduced1)
- *pronalazi razlike između slike i modela
- compare_ext_variation_model (ImageReduced1, RegionDiff, VarModelID, 'absolute')
- *označuje područje razlike(connectedregions) te zatim oblik područja(selectedregions)
- connection (RegionDiff, ConnectedRegions)
- select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 99999)
- dev_display (ImageReduced1)
- *broji nepravilne regije
- count_obj (SelectedRegions, NDefects)
- if (NDefects > 0)
- *ocrtava greške ako ih ima
- dev_set_color ('red')
- dev_set_draw ('margin')
- dev_set_line_width (2)
- dev_display (SelectedRegions)
- disp_message (WindowHandle, 'Image check not OK', 'window', 12, 12, 'red', 'false')
- else
- disp_message (WindowHandle, 'Image check OK', 'window', 12, 12, 'green', 'false')
- endif
- *ocrtava rubove predmeta
- dev_set_color ('green')
- dev_set_line_width (2)
- dev_display (Edges)
- endif
- disp_continue_message (WindowHandle, 'black', 'true')
- stop ()
- endfor
- *čisti modele
- clear_shape_model (ShapeModelID)
- clear_variation_model (VarModelID)
- * ovo je trik za poboljšanje očitavanja rubova
- * osim binomnog filtera koristi izglade se regije uz konture tak oda se rubovi povečaju pretvori u regiju te se smanji i time se još više izgladi
- **hom_mat2d_identity (HomMat2DIdentity)
- **hom_mat2d_scale (HomMat2DIdentity, 4, 4, 0, 0, HomMat2DScale)
- **affine_trans_contour_xld (Edges, ZoomedEdges, HomMat2DScale)
- **gen_image_const (VarImageBig, 'byte', 4 * Width, 4 * Height)
- **count_obj (ZoomedEdges, NEdges)
- **for i := 1 to NEdges by 1
- ** select_obj (ZoomedEdges, ObjectSelected, i)
- ** get_contour_xld (ObjectSelected, RowEdge, ColEdge)
- ** gen_region_polygon (Region1, RowEdge, ColEdge)
- ** dilation_circle (Region1, RegionDilation, 2.5)
- ** paint_region (RegionDilation, VarImageBig, VarImageBig, 255, 'fill')
- **endfor
- **zoom_image_size (VarImageBig, VarImageSmall, Width, Height, 'weighted')
- **binomial_filter (VarImageSmall, VarImage, 3, 3)
[text] kod
Viewer
Editor
You can edit this paste and save as new: