[text] kod

Viewer

  1. dev_close_window ()
  2.  
  3. *učitava sliku i određuje dimenzije
  4. read_image (Image, 'plus/p_00')
  5. get_image_size (Image, Width, Height)
  6.  
  7. *otvara prozor te prikazuje učitanu sliku
  8. dev_open_window (0, 510, Width, Height, 'black', WindowHandle)
  9. dev_open_window (0, 0, Width, Height, 'black', WindowHandle1)
  10. dev_update_off ()
  11. set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
  12. dev_set_window(WindowHandle1)
  13. dev_display (Image)
  14. disp_message (WindowHandle1, 'Model Image', 'window', 12, 12, 'black', 'true')
  15. dev_set_window(WindowHandle)
  16.  
  17. *određuje regije koje odgavaraju određenom stupnju sive boje
  18. threshold (Image, Region, 200, 'max')
  19. fill_up (Region, RegionFillUp)
  20. difference (RegionFillUp, Region, RegionDifference)
  21. *stvara područje oko odabrane regije
  22. shape_trans (RegionDifference, LogoArea, 'convex')
  23. dilation_circle (LogoArea, LogoArea, 5)
  24. *smanjuje domenu slike na regiju koju promatramo
  25. reduce_domain (Image, LogoArea, ImageReduced)
  26. *stvara model za prepoznavanje oblika
  27. create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ShapeModelID)
  28. *sprema koordinate regije
  29. area_center (LogoArea, Area, ModelRow, ModelColumn)
  30.  
  31. edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 10, 20)
  32. *Cijeli gornji 'trik' se može zamijeniti naredbom sobel_amp koja detektira rubove - razlika je u preciznosti      
  33. sobel_amp (ImageReduced, EdgeAmplitude, 'sum_sqrt', 5)
  34.  
  35. *Detektirani rubovi se izglađuju binomnim filtrom te se stvara varijacijski model za 
  36. *kasnije pronalaženje razlika između modela i slike
  37. binomial_filter (EdgeAmplitude, VarImage, 3, 3)
  38. create_variation_model (Width, Height, 'byte', 'direct', VarModelID)
  39. prepare_direct_variation_model (Image, EdgeAmplitude, VarModelID, 15, 4)
  40. dev_display (VarImage)
  41. disp_message (WindowHandle, 'Variation Image', 'window', 12, 12, 'black', 'true')
  42. disp_continue_message (WindowHandle, 'black', 'true')
  43. stop ()
  44.  
  45. * provjerava slike
  46. for i := 1 to 24 by 1
  47.     dev_clear_window()
  48.     read_image (Image, 'plus/p_' + i$'02d')
  49.     *pronalazi model na trenutnoj slici
  50.     find_shape_model (Image, ShapeModelID, -rad(50), rad(360), 0, 1, 0.5, 'least_squares', 0, 0, Row, Column, Angle, Score)
  51.     
  52.     dev_set_window(WindowHandle1)
  53.     dev_display (Image)
  54.     disp_message (WindowHandle1, 'Current Image', 'window', 12, 12, 'black', 'true')
  55.     dev_set_window(WindowHandle)
  56.  
  57.     if (|Score| != 0)
  58.         *izračunava matricu transformacije te transformira sliku da odgovara položaju modela 
  59.         vector_angle_to_rigid (Row, Column, Angle, ModelRow, ModelColumn, 0, HomMat2D)
  60.         affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
  61.         *Smanjuje domenu na kojoj pretražuje
  62.         reduce_domain (ImageAffineTrans, LogoArea, ImageReduced1)
  63.         
  64.         *pronalazi razlike između slike i modela
  65.         compare_ext_variation_model (ImageReduced1, RegionDiff, VarModelID, 'absolute')
  66.         
  67.         *označuje područje razlike(connectedregions) te zatim oblik područja(selectedregions)  
  68.         connection (RegionDiff, ConnectedRegions)
  69.         select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 99999)
  70.         
  71.         dev_display (ImageReduced1)
  72.      
  73.         *broji nepravilne regije
  74.         count_obj (SelectedRegions, NDefects)
  75.         if (NDefects > 0)
  76.             *ocrtava greške ako ih ima
  77.             dev_set_color ('red')
  78.             dev_set_draw ('margin')
  79.             dev_set_line_width (2)
  80.             dev_display (SelectedRegions)
  81.             disp_message (WindowHandle, 'Image check not OK', 'window', 12, 12, 'red', 'false')
  82.         else
  83.             disp_message (WindowHandle, 'Image check OK', 'window', 12, 12, 'green', 'false')
  84.         endif
  85.         *ocrtava rubove predmeta
  86.         dev_set_color ('green')
  87.         dev_set_line_width (2)
  88.         dev_display (Edges)
  89.     endif
  90.      
  91.     disp_continue_message (WindowHandle, 'black', 'true')
  92.     stop ()
  93.     
  94. endfor
  95.  
  96. *čisti modele
  97. clear_shape_model (ShapeModelID)
  98. clear_variation_model (VarModelID)
  99.  
  100.  
  101.  
  102.     
  103. * ovo je trik za poboljšanje očitavanja rubova 
  104. * 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
  105. **hom_mat2d_identity (HomMat2DIdentity)
  106. **hom_mat2d_scale (HomMat2DIdentity, 4, 4, 0, 0, HomMat2DScale)
  107. **affine_trans_contour_xld (Edges, ZoomedEdges, HomMat2DScale)
  108. **gen_image_const (VarImageBig, 'byte', 4 * Width, 4 * Height)
  109. **count_obj (ZoomedEdges, NEdges)
  110. **for i := 1 to NEdges by 1
  111. **    select_obj (ZoomedEdges, ObjectSelected, i)
  112. **    get_contour_xld (ObjectSelected, RowEdge, ColEdge)
  113. **    gen_region_polygon (Region1, RowEdge, ColEdge)
  114. **    dilation_circle (Region1, RegionDilation, 2.5)
  115. **    paint_region (RegionDilation, VarImageBig, VarImageBig, 255, 'fill')
  116. **endfor
  117. **zoom_image_size (VarImageBig, VarImageSmall, Width, Height, 'weighted')
  118. **binomial_filter (VarImageSmall, VarImage, 3, 3)
  119.  

Editor

You can edit this paste and save as new:


File Description
  • kod
  • Paste Code
  • 21 Jan-2021
  • 4.93 Kb
You can Share it: