由于二值图点的RGB是0或者255,可以根据一个点A的RGB值 与周围的8个点的RBG 比较 设定一个值N(0 <N <8) 当A的RGB值与周围8个点的RGB相等数小于N时 此点为噪点改变其RGB值即可 .
附上一段代码 没具体测试。
procedure ClearNoise(Bitmap:TBitmap;N:Integer);
var
piexl : tcolor;
nearDots,x,y,RGBz : integer;
begin
bitmap.Canvas.Pixels[0,0]:=rgb(255, 255, 255);
bitmap.Canvas.Pixels[bitmap.Width - 1,bitmap.Height - 1]:=rgb(255, 255, 255);
for x := 1 to bitmap.Width -2 do
for y := 1 to bitmap.Height-2 do
begin
piexl := bitmap.Canvas.Pixels[x,y];
RGBz := getrvalue(piexl);
if (RGBz = 0) then
begin
nearDots := 0; //判断周围8个点RGB是否相等
if (getrvalue(bitmap.Canvas.Pixels[x - 1, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x + 1, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x - 1, y]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x + 1, y]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x - 1, y + 1]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x, y + 1]) = RGBz) then nearDots:=nearDots+1 ;
if (getrvalue(bitmap.Canvas.Pixels[x + 1, y + 1] )= RGBz) then nearDots:=nearDots+1 ;
if (nearDots < N) then bitmap.Canvas.Pixels[x,y]:=rgb(255, 255, 255)
end
else
bitmap.Canvas.Pixels[x,y]:=rgb(255, 255, 255);
end;
end;