有的时候,仅靠灰度算法和二值化算法还是不能达到效果,这个时候就要借助图像滤波算法了
原始图(www.wolfsurfer.com)
经过灰度算法和二值化算法
经过滤波算法
可以看到,干扰被过滤掉了,只有进行下一步(图像分割)
图像滤波算法代码如下
function BTFilter(Bmp: TBitmap): TBitmap;
procedure SelectionSort(var a: array of integer);
var
i, j, t: integer;
begin
for i := low(a) to high(a) - 1 do for j := high(a) downto i + 1 do if a[i] > a[j] then begin t := a[i]; a[i] := a[j]; a[j] := t; end;
end;
var
p1, p2, p3, p4: pbytearray;
i, j: integer;
RvalueArray, GvalueArray, BvalueArray: array [0..8] of Integer;
begin
Bmp.PixelFormat := pf24bit;
Result := TBitmap.Create; Result.PixelFormat := pf24bit; Result.Width := Bmp.Width; Result.Height := Bmp.Height;
for i := 0 to Bmp.Width - 1 do for j := 0 to Bmp.Height - 1 do Result.Canvas.Pixels[i, j] := Bmp.Canvas.Pixels[i, j];
for j := 1 to Bmp.Height - 2 do
begin
p1 := Result.ScanLine[j]; p2 := Bmp.ScanLine[j - 1]; p3 := Bmp.ScanLine[j]; p4 := Bmp.ScanLine[j + 1];
for i := 1 to Bmp.Width - 2 do
begin
RvalueArray[0] := p2[3 * (i - 1) + 2]; RvalueArray[1] := p2[3 * i + 2]; RvalueArray[2] := p2[3 * (i + 1) + 2];
RvalueArray[3] := p3[3 * (i - 1) + 2]; RvalueArray[4] := p3[3 * i + 2]; RvalueArray[5] := p3[3 * (i + 1) + 2];
RvalueArray[6] := p4[3 * (i - 1) + 2]; RvalueArray[7] := p4[3 * i + 2]; RvalueArray[8] := p4[3 * (i + 1) + 2];
SelectionSort(RvalueArray);
p1[3 * i + 2] := RvalueArray[4];
GvalueArray[0] := p2[3 * (i - 1) + 1]; GvalueArray[1] := p2[3 * i + 1]; GvalueArray[2] := p2[3 * (i + 1) + 1];
GvalueArray[3] := p3[3 * (i - 1) + 1]; GvalueArray[4] := p3[3 * i + 1]; GvalueArray[5] := p3[3 * (i + 1) + 1];
GvalueArray[6] := p4[3 * (i - 1) + 1]; GvalueArray[7] := p4[3 * i + 1]; GvalueArray[8] := p4[3 * (i + 1) + 1];
SelectionSort(GvalueArray);
p1[3 * i + 1] := RvalueArray[4];
BvalueArray[0] := p2[3 * (i - 1)]; BvalueArray[1] := p2[3 * i]; BvalueArray[2] := p2[3 * (i + 1)];
BvalueArray[3] := p3[3 * (i - 1)]; BvalueArray[4] := p3[3 * i]; BvalueArray[5] := p3[3 * (i + 1)];
BvalueArray[6] := p4[3 * (i - 1)]; BvalueArray[7] := p4[3 * i]; BvalueArray[8] := p4[3 * (i + 1)];
SelectionSort(BvalueArray);
p1[3 * i] := BvalueArray[4];
end;
end;
FreeAndNil(Bmp);
end;
图像滤波算法
最新推荐文章于 2024-02-06 00:01:15 发布