本文整理自网络,侵删。
由于噪声点对边缘检测有一定的影响,所以效果更好的边缘检测器是高斯拉普拉斯(LOG)算子,它把高斯平滑滤波器和拉普拉斯锐化滤波器结合了起来,先平滑掉噪声,再进行边缘检测,所以效果会更好。常用的LOG算子是5X5的模板,如下所示:
│-2 -4 -4 -4 -2│
│-4 0 8 0 -4│
│-4 8 4 8 -4│
│-4 0 8 0 -4│
│ 2 -4 -4 -4 -2│
程序实现:
procedure Gauss_Laplace(Bitmap: TBitmap);
var
bmp1, bmp2: TBitmap;
p, a1, a2, a3, a4, a5: pByteArray;
i, j: Integer;
begin
bmp1 := TBitmap.Create;
bmp2 := TBitmap.Create;
bmp1.Assign(Bitmap);
bmp1.PixelFormat := pf24bit;
bmp1.Width := Bitmap.Width;
bmp1.Height := Bitmap.Height;
bmp2.Assign(Bitmap);
bmp2.PixelFormat := pf24bit;
for j:=2 to bmp1.Height - 3 do
begin
p := bmp1.ScanLine[j];
a1:= bmp2.ScanLine[j-2];
a2 := bmp2.ScanLine[j-1];
a3 := bmp2.ScanLine[j];
a4 := bmp2.ScanLine[j+1];
a5 := bmp2.ScanLine[j+2];
for i:=2 to bmp1.Width - 3 do
begin
p[3*i+2] := Min(255, Max(0, (
-2*a1[3*(i-2)+2]-4*a1[3*(i-1)+2]-4*a1[3*i+2]-4*a1[3*(i+1)+2]-2*a1[3*(i+2)+2]
-4*a2[3*(i-2)+2]+0*a2[3*(i-1)+2]+8*a2[3*i+2]+0*a2[3*(i+1)+2]-4*a2[3*(i+2)+2]
-4*a3[3*(i-2)+2]+8*a3[3*(i-1)+2]+4*a3[3*i+2]+8*a3[3*(i+1)+2]-4*a3[3*(i+2)+2]
-4*a4[3*(i-2)+2]+0*a4[3*(i-1)+2]+8*a4[3*i+2]+0*a4[3*(i+1)+2]-4*a4[3*(i+2)+2]
+2*a5[3*(i-2)+2]-4*a5[3*(i-1)+2]-4*a5[3*i+2]-4*a5[3*(i+1)+2]-2*a5[3*(i+2)+2])));
p[3*i+1] := Min(255, Max(0, (
-2*a1[3*(i-2)+1]-4*a1[3*(i-1)+1]-4*a1[3*i+1]-4*a1[3*(i+1)+1]-2*a1[3*(i+2)+1]
-4*a2[3*(i-2)+1]+0*a2[3*(i-1)+1]+8*a2[3*i+1]+0*a2[3*(i+1)+1]-4*a2[3*(i+2)+1]
-4*a3[3*(i-2)+1]+8*a3[3*(i-1)+1]+4*a3[3*i+1]+8*a3[3*(i+1)+1]-4*a3[3*(i+2)+1]
-4*a4[3*(i-2)+1]+0*a4[3*(i-1)+1]+8*a4[3*i+1]+0*a4[3*(i+1)+1]-4*a4[3*(i+2)+1]
+2*a5[3*(i-2)+1]-4*a5[3*(i-1)+1]-4*a5[3*i+1]-4*a5[3*(i+1)+1]-2*a5[3*(i+2)+1])));
p[3*i] := Min(255, Max(0, (
-2*a1[3*(i-2)]-4*a1[3*(i-1)]-4*a1[3*i]-4*a1[3*(i+1)]-2*a1[3*(i+2)]
-4*a2[3*(i-2)]+0*a2[3*(i-1)]+8*a2[3*i]+0*a2[3*(i+1)]-4*a2[3*(i+2)]
-4*a3[3*(i-2)]+8*a3[3*(i-1)]+4*a3[3*i]+8*a3[3*(i+1)]-4*a3[3*(i+2)]
-4*a4[3*(i-2)]+0*a4[3*(i-1)]+8*a4[3*i]+0*a4[3*(i+1)]-4*a4[3*(i+2)]
+2*a5[3*(i-2)]-4*a5[3*(i-1)]-4*a5[3*i]-4*a5[3*(i+1)]-2*a5[3*(i+2)])));
end;
end;
Bitmap.Assign(bmp1);
bmp1.Free;
bmp2.Free;
end;
相关阅读 >>
incsecond:将一个tdatetime变量加减一定数量的秒数
Delphi xe安装 tclientsocket, tserversocket控件
更多相关阅读请进入《Delphi》频道 >>