本文整理自网络,侵删。
Prewitte算子采用的是两个模板:
│-1 -1 -1│ │1 0 -1│
│ 0 0 0 │ 和│1 0 -1│
│ 1 1 1 │ │1 0 -1│
分别处理后得到的像素点的较大值。
procedure Prewitte(Bitmap: TBitmap);
var
bmp1, bmp2: Tbitmap;
p1, p3, p2, p4: pbytearray;
i, j: integer;
r, g, b: integer;
begin
bmp1 := Tbitmap.Create;
bmp2 := Tbitmap.Create;
bmp1.Assign(Bitmap);
bmp1.PixelFormat := pf24bit;
bmp2.Assign(bmp1);
bmp2.PixelFormat := pf24bit;
for j := 1 to bmp1.Height - 2 do
begin
p1 := bmp1.ScanLine[j];
p2 := bmp2.ScanLine[j - 1];
p3 := bmp2.ScanLine[j];
p4 := bmp2.ScanLine[j + 1];
for i := 1 to bmp1.Width - 2 do
begin
r := min(255, max(0, ((
-p2[3 * (i - 1) + 2] - p2[3 * i + 2] - p2[3 * (i + 1) + 2]
- 0 * p3[3 * (i - 1) + 2] + 0 * p3[3 * i + 2] - 0 * p3[3 * (i + 1) + 2]
+ p4[3 * (i - 1) + 2] + p4[3 * i + 2] + p4[3 * (i + 1) + 2]))));
g := min(255, max(0, ((
-p2[3 * (i - 1) + 1] - p2[3 * i + 1] - p2[3 * (i + 1) + 1]
- 0 * p3[3 * (i - 1) + 1] + 0 * p3[3 * i + 1] - 0 * p3[3 * (i + 1) + 1]
+ p4[3 * (i - 1) + 1] + p4[3 * i + 1] + p4[3 * (i + 1) + 1]))));
b := min(255, max(0, ((
-p2[3 * (i - 1)] - p2[3 * i] - p2[3 * (i + 1)]
- 0 * p3[3 * (i - 1)] + 0 * p3[3 * i] - 0 * p3[3 * (i + 1)]
+ p4[3 * (i - 1)] + p4[3 * i + 2] + p4[3 * (i + 1)]))));
begin
p1[3 * i + 2] := min(255, max(0, ((
p2[3 * (i - 1) + 2] - 0 * p2[3 * i + 2] - p2[3 * (i + 1) + 2]
+ p3[3 * (i - 1) + 2] + 0 * p3[3 * i + 2] - p3[3 * (i + 1) + 2]
+ p4[3 * (i - 1) + 2] + 0 * p4[3 * i + 2] - p4[3 * (i + 1) + 2]))));
p1[3 * i + 1] := min(255, max(0, ((
p2[3 * (i - 1) + 1] - 0 * p2[3 * i + 1] - p2[3 * (i + 1) + 1]
+ p3[3 * (i - 1) + 1] + 0 * p3[3 * i + 1] - p3[3 * (i + 1) + 1]
+ p4[3 * (i - 1) + 1] + 0 * p4[3 * i + 1] - p4[3 * (i + 1) + 1]))));
p1[3 * i] := min(255, max(0, ((
p2[3 * (i - 1)] - 0 * p2[3 * i] - p2[3 * (i + 1)]
+ p3[3 * (i - 1)] + 0 * p3[3 * i] - p3[3 * (i + 1)]
+ p4[3 * (i - 1)] + 0 * p4[3 * i] - p4[3 * (i + 1)]))));
p1[3 * i + 2] := (max(r, p1[3 * i + 2]));
p1[3 * i + 1] := (max(g, p1[3 * i + 1]));
p1[3 * i] := (max(b, p1[3 * i]));
end;
end;
end;
Bitmap.Assign(bmp1);
Bmp1.Free;
bmp2.Free;
end;
相关阅读 >>
更多相关阅读请进入《Delphi》频道 >>