图像滤波算法

有的时候,仅靠灰度算法和二值化算法还是不能达到效果,这个时候就要借助图像滤波算法了
原始图(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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值