ImageEn, unit ieDocum

Preview of Detection Methods


The "Every Method" editing demo allows you to preview 300 editing, analysis and effects methods, and generate sample code.

Image Editing Methods

◼Analysis Methods
◼Color Adjustment Methods
◼Color Depth Methods
◼Detection Methods
◼Special Detection Methods
◼Document Methods
◼Drawing Methods
◼Effects Methods
◼Filter Methods
◼Geometric Methods
◼Painting and Alpha Methods
◼Smoothing Methods
◼Other Methods
◼Selection Methods
◼Interactive Tools

Test Images

ImageEnView1.IO.LoadFromFile( 'D:\ImageTest1.jpg' );

  

canny (IEVision)

// Find line segments in a binary image using a probabilistic Hough transform
ImageEnView1.IEBitmap.PixelFormat := ie8g;
ImageEnView1.IEBitmap.GetIEVisionImage().canny( 50, 200, 3 );
ImageEnView1.IEBitmap.Negative();  // Which will call ImageEnView1.Update();

  

EdgeDetect_ShenCastan

// Convert the current color image to black & white (1 bit) using a Shen-Castan (ISEF) edge detection algorithm
ImageEnView1.Proc.EdgeDetect_ShenCastan();

  

EdgeDetect_Sobel

// Detect the edges of objects within an image using a Sobel filter
ImageEnView1.Proc.EdgeDetect_Sobel();
ImageEnView1.Proc.Negative();

  

LayersCreateFromEdge

// Automatically select a color region and convert it to a polygon
ImageEnView1.SelectionBase := iesbBitmap;
if ImageEnView1.LayersCreateFromEdge( ClickPt.X, ClickPt.Y, 54, False ) > 0 then
begin
  ImageEnView1.CurrentLayer.BorderWidth := 2;
  ImageEnView1.CurrentLayer.BorderColor := Color;
  ImageEnView1.CurrentLayer.FillColor   := clWhite;
  ImageEnView1.LayersMergeAll();
end;

  

matchTemplate (IEVision)

// Find a matching image within our image
template := SearchImage.GetIEVisionImage();
image := ImageEnView1.IEBitmap.GetIEVisionImage();
r := image.matchTemplate( template, ievSQDIFF, @rank );
// Draw a red box around the found rectangle
with ImageEnView1.IEBitmap.Canvas do
begin
  Pen.Color := clRed;
  Pen.Width := 5;
  Brush.Style := bsClear;
  Rectangle( IEVisionRectToTRect( r ));
  Font.Height := 36;
  Font.Color := clRed;
  Font.Style := [fsBold];
  TextOut( r.X + 10, r.Y + 4, Format( 'Match: %d%%', [Round( rank )]));
end;
ImageEnView1.Update();

  

SeparateObjects

// Show detected objects in the image
ImageEnView1.Proc.SaveUndo();
ImageEnView1.Proc.ConvertToBWThreshold( 80 );    // Better detection
rects := ImageEnView1.Proc.SeparateObjects( 4, True, 10 );
ImageEnView1.Proc.Undo();                        // Get full color image back
ImageEnView1.IEBitmap.IECanvas.DrawRects( rects, clRed, 2 );
// Output object count
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Objects: %d', [ rects.Count ]), 'Arial', 10, clRed, [fsBold] );
ImageEnView1.Update();
rects.Free();

 

createBlobDetector (IEVision)

// Detect blobs/shapes in image
detector := IEVisionLib().createBlobDetector();
detector.setFilterByInertia( False, 0.1, 3.4e+38 );
detector.setFilterByConvexity( False, 0.95, 3.4e+38 );
keyPoints := detector.detect( ImageEnView1.IEBitmap.GetIEVisionImage() );
ImageEnView1.IEBitmap.IECanvas.DrawRects( keyPoints, clRed, 2, True );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Found: %d', [ KeyPoints.size ]), 'Arial', 12, Text_Color, [fsBold] );
ImageEnView1.Update();

 

detectLines (IEVision)

// Load test image
ImageEnView1.IO.LoadFromFile( 'D:\TestImage.jpg' );

  

// Detect lines using a Binary Descriptor
lines := ImageEnView1.IEBitmap.GetIEVisionImage().detectLines( ievBinaryDescriptor );
ImageEnView1.IEBitmap.IECanvas.DrawLines( lines, clRed, 2 );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Lines: %d', [ lines.size ]), 'Arial', 12, Text_Color, [fsBold] );
ImageEnView1.Update();

  

// Detect lines using a LSD Detector
lines := ImageEnView1.IEBitmap.GetIEVisionImage().detectLines( ievLSDDetector );
ImageEnView1.IEBitmap.IECanvas.DrawLines( lines, clRed, 2 );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Lines: %d', [ lines.size ]), 'Arial', 12, Text_Color, [fsBold] );
ImageEnView1.Update();

  

houghLinesP (IEVision)

// Find edges in an image using the Canny algorithm
ImageEnView1.Proc.SaveState();
ImageEnView1.IEBitmap.PixelFormat := ie8g;
ImageEnView1.IEBitmap.GetIEVisionImage().blur( IEVisionSize(3, 3), IEVisionPoint(-1, -1) );
ImageEnView1.IEBitmap.GetIEVisionImage().canny( 50, 200, 3 );
lines := ImageEnView1.IEBitmap.GetIEVisionImage().houghLinesP( 1, PI / 180, 200, 100, 10 );
ImageEnView1.Proc.RestoreState();    // Restore full color image
ImageEnView1.IEBitmap.IECanvas.DrawLines( lines, clRed, 2 );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Lines: %d', [ lines.size ]), 'Arial', 12, Text_Color, [fsBold] );
ImageEnView1.Update();

  

houghCircles (IEVision)

// Load test image
ImageEnView1.IO.LoadFromFile( 'D:\TestImage.jpg' );

  

// Find circles in an image using the Hough algorithm
ImageEnView1.Proc.SaveState();
ImageEnView1.IEBitmap.PixelFormat := ie8g;
ImageEnView1.IEBitmap.GetIEVisionImage().blur( IEVisionSize(3, 3), IEVisionPoint(-1, -1) );
circles := ImageEnView1.IEBitmap.GetIEVisionImage().houghCircles( ievGRADIENT_ALT, 1.5, 10, 300, 0.9, 0, 0 );
ImageEnView1.IEBitmap.RestoreState();  // Restore image to full color
ImageEnView1.IEBitmap.IECanvas.DrawRects( circles, clBlack, 3 );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Circles: %d', [ circles.size() ]), 'Arial', 14, clBlack, [fsBold] );
ImageEnView1.Update();  // Show changes to canvas

  

findIn (IEVision)

// Find Faces in image
objectsFinder := IEVisionLib.createObjectsFinder();
objectsFinder.addClassifier('face detector 1', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_DEFAULT));
objectsFinder.addClassifier('face detector 2', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_ALT_TREE));
objectsFinder.addClassifier('face detector 3', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_ALT));
objectsFinder.addClassifier('face detector 4', IEVisionLib.createCascadeClassifier(IEVC_FRONTAL_FACE_ALT_2));
objectsFinder.addClassifier('face detector 5', IEVisionLib.createCascadeClassifier(IEVC_PROFILE_FACE));
objectsFinder.findIn(ImageEnView1.IEBitmap.GetIEVisionImage());
rects := objectsFinder.mergeAllRects();  // merge intersecting rectangles
ImageEnView1.IEBitmap.IECanvas.DrawRects( rects, clRed, 2 );
ImageEnView1.Proc.TextOut( Align_Text_Near_Left, Align_Text_Near_Top, Format( 'Found: %d', [ rects.size ]), 'Arial', 12, Text_Color, [fsBold] );
ImageEnView1.Update();

  

goodFeaturesToTrack (IEVision)

// Find the strongest corners in the image and mark them with a red circle
pts := ImageEnView1.IEBitmap.GetIEVisionImage().goodFeaturesToTrack( 100, 0.01, 10, nil, 3, False );
ImageEnView1.IEBitmap.IECanvas.Pen.Color   := clRed;
ImageEnView1.IEBitmap.IECanvas.Pen.Width   := 2;
ImageEnView1.IEBitmap.IECanvas.Brush.Style := bsClear;
for i := 0 to pts.size - 1 do
begin
  pt := pts.getPoint( i );
  ImageEnView1.IEBitmap.IECanvas.Ellipse( Round( pt.x ) - 3, Round( pt.y ) - 3, Round( pt.x ) + 3, Round( pt.y ) + 3 );
end;
ImageEnView1.Update();

  

findContours (IEVision)

// Find the outlines of shapes in a thresholded copy of the image and draw them over the image
bmp := TIEBitmap.Create( ImageEnView1.IEBitmap );
bmp.PixelFormat := ie8g;  // findContours requires a binary 8bit, 1 channel image
bmp.GetIEVisionImage().threshold( 0, 255, ievTHRESH_BINARY or ievTHRESH_OTSU );
contours := bmp.GetIEVisionImage().findContours( ievEXTERNAL, ievCHAIN_APPROX_SIMPLE, IEVisionPoint( 0, 0 ));
bmp.Free();
for i := 0 to contours.size() - 1 do
  if IEVisionLib().createMath().contourArea( TIEVisionVectorPoint( contours.getObj( i ))) >= 500 then
    IEVisionLib().createDrawing().drawContours( ImageEnView1.IEBitmap.GetIEVisionImage(), contours, IEVisionScalar( 0, 0, 255 ), i, 2 );
ImageEnView1.Update();

  

matchTemplateMulti (IEVision)

// Find all matches (99% or better) of a search image (150x150 area at 25% of the image) and draw a box around each
x := ImageEnView1.IEBitmap.Width div 4;
y := ImageEnView1.IEBitmap.Height div 4;
searchBmp := TIEBitmap.Create( ImageEnView1.IEBitmap, Rect( x, y, x + 150, y + 150 ));
count := ImageEnView1.IEBitmap.GetIEVisionImage().matchTemplateMulti( searchBmp.GetIEVisionImage(), nil, 99, vrects, vranks );
for i := 0 to count - 1 do
begin
  r := IEVisionRectToTRect( vrects.getRect( i ));
  ImageEnView1.IEBitmap.Canvas.Pen.Color   := clRed;
  ImageEnView1.IEBitmap.Canvas.Pen.Width   := 5;
  ImageEnView1.IEBitmap.Canvas.Brush.Style := bsClear;
  ImageEnView1.IEBitmap.Canvas.Rectangle( r );
end;
ImageEnView1.Update();
searchBmp.Free();

// Or more simply using the helper method
count := ImageEnView1.IEBitmap.MatchTemplate( searchBmp, 99, rects, ranks );

TIEVisionFeaturesDetector (IEVision)

// Find matching keypoints between the image and a rotated (15 deg.) and scaled (80%) copy
detector := IEVisionLib().createFeaturesDetector( ievFeatureSIFT );
detector.detect( ImageEnView1.IEBitmap.GetIEVisionImage(), ImageEnView2.IEBitmap.GetIEVisionImage(), 2000 );
ImageEnView1.IEBitmap.AssignIEVisionImage( detector.getMatchingGraph() );
ImageEnView1.Update(); // Show changes in our viewer

See Also

◼Analysis Methods
◼Color Adjustment Methods
◼Color Depth Methods
◼Detection Methods
◼Special Detection Methods
◼Document Methods
◼Drawing Methods
◼Effects Methods
◼Filter Methods
◼Geometric Methods
◼Painting and Alpha Methods
◼Smoothing Methods
◼Other Methods
◼Selection Methods
◼Interactive Tools