由于二值图点的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(255255255); 
  bitmap.Canvas.Pixels[bitmap.Width 
- 1,bitmap.Height - 1]:=rgb(255255255); 
  
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 = 0then 
    
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(255255255
    
end 
    
else 
      bitmap.Canvas.Pixels[x,y]:
=rgb(255255255); 
  
end
end;

 

 

posted on 2010-09-15 17:54  °ι 、曲 终  阅读(553)  评论(0)    收藏  举报