Kantendetektionsfilter
In diesem Beispiel werden folgende Kantendetektionsfilter verglichen:
Erläuterung
Der Sobel-Filter ist ein einfacher linearer Filter, um Gradienten in einem Bild zu markieren. Der Scharr-Filter ist dazu sehr ähnlich; lediglich die Ausprägung des Filter-Kernels ist etwas anders. Der Scharr-Filter hat eine bessere Isotropie, d. h. die Detektion von Kanten ist richtungsunabhängig.
Der Laplace-Filter detektiert Kanten basierend auf den Nullstellen der diskreten 2. Ableitung des Bildes. Dieses Verfahren ist vergleichsweise rauschanfällig.
Variablen
// Sobel
ipImageSobel : ITcVnImage;
ipImageSobelDisp : ITcVnDisplayableImage;
eSobel_DestDepth : ETcVnElementType := TCVN_ET_USINT;
aSobel_DerivOrder : ARRAY [0..1] OF UDINT := [1, 1];
nSobel_KernelSize : UDINT := 3;
fSobel_Scale : LREAL := 10;
fSobel_Delta : LREAL := 0;
eSobel_BorderExtra : ETcVnBorderInterpolationMethod := TCVN_BIM_DEFAULT;
// Scharr
ipImageScharr : ITcVnImage;
ipImageScharrDisp : ITcVnDisplayableImage;
eScharr_DestDepth : ETcVnElementType := TCVN_ET_USINT;
eScharr_FilterDir : ETcVnFilterDirection := TCVN_FD_X;
fScharr_Scale : LREAL := 1;
fScharr_Delta : LREAL := 0;
eScharr_BorderExtra : ETcVnBorderInterpolationMethod := TCVN_BIM_DEFAULT;
// Laplace
ipImageLaplace : ITcVnImage;
ipImageLaplaceDisp : ITcVnDisplayableImage;
eLaplace_DestDepth : ETcVnElementType := TCVN_ET_USINT;
nLaplace_KernelSize : UDINT := 3;
fLaplace_Scale : LREAL := 10;
fLaplace_Delta : LREAL := 0;
eLaplace_BorderExtra : ETcVnBorderInterpolationMethod := TCVN_BIM_DEFAULT;
Code
// Execute the Sobel Filter
hr := F_VN_SobelFilterExp(
ipSrcImage := ipImageIn
ipDestImage := ipImageSobel,
eDestDepth := eSobel_DestDepth,
nXOrder := aSobel_DerivOrder[0],
nYOrder := aSobel_DerivOrder[1],
nKernelSize := nSobel_KernelSize,
fScale := fSobel_Scale,
fDelta := fSobel_Delta,
eBorderType := eSobel_BorderExtra,
hrPrev := hr);
// Execute the Scharr Filter
hr := F_VN_ScharrFilterExp(
ipSrcImage := ipImageIn,
ipDestImage := ipImageScharr,
eDestDepth := eScharr_DestDepth,
eFilterDirection:= eScharr_FilterDir,
fScale := fScharr_Scale,
fDelta := fScharr_Delta,
eBorderType := eScharr_BorderExtra,
hrPrev := hr);
// Execute the Laplacian Filter
hr := F_VN_LaplacianFilterExp(
ipSrcImage := ipImageIn,
ipDestImage := ipImageLaplace,
eDestDepth := eLaplace_DestDepth,
nKernelSize := nLaplace_KernelSize,
fScale := fLaplace_Scale,
fDelta := fLaplace_Delta,
eBorderType := eLaplace_BorderExtra,
hrPrev := hr);
Ergebnisse
Das Beispielprojekt enthält die Funktionsaufrufe der drei Filter. Die Parameter-Konfiguration und deren Auswirkung auf ein Beispielbild können in diesem Beispiel ausprobiert werden.
Originalbild | Sobel-Filter | Scharr-Filter | Laplace-Filter |