Delphi二值图片去杂点问题

本文介绍了一种基于像素比较的二值图像去噪方法,通过设定阈值N,如果某像素点与其周围8个像素点颜色相同的数量小于N,则认为该点为噪点并进行修正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

转载于:https://www.cnblogs.com/rogee/archive/2010/09/15/1827322.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值