由于二值图点的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 ;
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 ;