// 图像二值化
// Bmp: TBitmap; // 输入图像
// Gray: Integer // 阀值
Procedure TwoValue(Bmp: TBitmap; Gray: Integer);
Var
P: PByteArray;
X, Y, Z: Integer;
Begin
//设置为24位真彩色,这样一个象素点包含三个字节
Bmp.PixelFormat := pf24Bit;
For Y := 0 To Bmp.Height - 1 Do
Begin
P := Bmp.ScanLine[Y]; // 读取一行象素点
For X := 0 To Bmp.Width - 1 Do
Begin
Z := Round(P[X * 3 + 2] * 0.3 + P[x * 3 + 1] * 0.59 + P[x * 3] * 0.11); // 计算象素点阀值
If Z > Gray Then // 象素点阀值 > 输入的阀值
Begin
// 把该象素点设置为白色
p[x * 3] := 255;
p[x * 3 + 1] := 255;
p[x * 3 + 2] := 255;
End
Else
Begin
// 把该象素点设置为黑色
p[x * 3] := 0;
p[x * 3 + 1] := 0;
p[x * 3 + 2] := 0;
End;
End;
End;
End;
// 降噪
// 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0 <N <8),当A的RGB值与周围8个点的RGB相等数小于N时,此点为噪点
// InBmpFile: String 要进行降噪的Bmm文件名
// OutBmpFile: String 降噪后Bmm文件保存的文件名
// G: Integer 图像二值化阀值
// N: Integer 降噪率 0 <N <8
// Z: Integer 降噪次数
// 输出
// 0:降噪成功
// 1:降噪失败
Function ClearNoise(InBmpFile, OutBmpFile: String; G, N, Z: Integer): Integer;
Var
Bmp: TBitmap ;
Piexl : tcolor;
NearDots, X, Y, i, RGBz : integer;
begin
Result := 1 ;
If Not FileExists(InBmpFile) Then Exit ; // 如果输入文件名不存在,直接退出
Bmp := TBitmap.Create;
Try
Bmp.LoadFromFile(InBmpFile) ; // 载入图像
TwoValue(Bmp, G); // 二值化
For i := 1 To Z Do // 循环降噪
Begin
// 先将图片左上和右下角的点设置为白色
Bmp.Canvas.Pixels[0,0] := clWhite;
Bmp.Canvas.Pixels[Bmp.Width - 1, Bmp.Height - 1] := clWhite;
For X := 0 To Bmp.Width - 1 Do
Begin
For Y := 0 To Bmp.Height - 1 Do
Begin
Piexl := Bmp.Canvas.Pixels[X, Y]; // 读取象素点颜色
RGBz := GetRValue(Piexl); // 读取象素点RGB值中的R值
// 因为图像已经二值化,如果R值=0,此象素点为黑色,如果R值 <>0,此象素点为白色,
If (RGBz = 0) Then // 处理黑点
Begin
NearDots := 0; // 与周围8个点RGB相等的点数
If (GetRValue(Bmp.Canvas.Pixels[X - 1, Y - 1]) = RGBz) Then Inc(NearDots) ; // 左上
If (GetRValue(Bmp.Canvas.Pixels[X, Y - 1]) = RGBz) Then Inc(NearDots) ; // 上
If (GetRValue(Bmp.Canvas.Pixels[X + 1, Y - 1]) = RGBz) Then Inc(NearDots) ; // 右上
If (GetRValue(Bmp.Canvas.Pixels[X - 1, Y]) = RGBz) Then Inc(NearDots) ; // 左
If (GetRValue(Bmp.Canvas.Pixels[X + 1, Y]) = RGBz) Then Inc(NearDots) ; // 右
If (GetRValue(Bmp.Canvas.Pixels[X - 1, Y + 1]) = RGBz) Then Inc(NearDots) ; // 左下
If (GetRValue(Bmp.Canvas.Pixels[X, Y + 1]) = RGBz) Then Inc(NearDots) ; // 下
If (GetRValue(Bmp.Canvas.Pixels[X + 1, Y + 1] )= RGBz) Then Inc(NearDots) ; // 右下
// 如果 与周围8个点RGB相等的点数 < 输入的降噪率,此点为噪点
If (NearDots < N) Then
Bmp.Canvas.Pixels[x,y] := clWhite // 把噪点颜色设置为白色(降噪)
End ;
End;
End ;
End ;
Bmp.SaveToFile(OutBmpFile);
Result := 0 ;
Finally
Bmp.Free ; // 释放 TBitmap
End ;
End;
分享到:
相关推荐
7种图像降噪matlab实现(程序源码及结果图和说明书任务书)
基于Dsp的图像降噪系统
源自大牛Joseph Salmon的PCA图像降噪新算法-patch based PCA,可以进行高斯噪声、泊松噪声等多种噪声的降噪处理,且能去的比较好的效果。内含代码和对应的文献,值得学习图像处理的看看!
介绍了小波变换的基础知识、图像降噪的基本理论以及研究成果
用python实现的k-svd,可用来进行图像降噪等
基于小波变换的图像去噪,从含噪图像可以看出噪声含量非常强,而从去噪的结果可以看出,通过小波去噪后的图像基本和原图像一致。第一次消噪滤去了大部分高频噪声,但与原图比较,依然有不少高频噪声,第二次消噪在第...
这是关于一个小波分析理论与图像降噪处理的文章。
该压缩包含基于偏微分方程(PDE)的数字图像降噪的代码及一份课程设计的报告文档,代码功能完整可用,报告格式较规范。本设计主要针对数字图像处理的一个重要分支数字图像复原作为主要研究对象。对于一幅给定的模糊...
DCT快速新算法及滤波器结构研究与子波变换域图像降噪研究.pdf
基于小波变换的图像降噪Matlab程序,适合图像降噪处理。
关于数字图像处理方面的相关编程,主要是 图像降噪 图像降噪(块效应)实验
基于对偶函数的图像降噪算法Matlab完整源码.zip 基于对偶函数的图像降噪算法Matlab完整源码.zip 基于对偶函数的图像降噪算法Matlab完整源码.zip 【资源说明】 该项目是个人毕设项目源码,评审分达到95分,调试运行...
基本的图像降噪算法通常是通过对图像进行低通滤波来去除图像中的噪声。 这种方法去掉了有噪声的像素,但是以模糊图像为代价——所有的边缘都被模糊了。 更先进的降噪算法检测图像中的边缘,并沿垂直于...
基于提升方案的小波变换实现图像降噪python源码.zip 基于提升方案的小波变换实现图像降噪python源码.zip 基于提升方案的小波变换实现图像降噪python源码.zip 【资源说明】 该项目是个人毕设项目源码,评审分达到95分...
医学图像降噪处理及计算机诊断辅助,编程实现基本用法
基于小波变换的图像降噪技术,曾诚,,小波分析在图像处理中有非常重要的应用。本文给出其在图像降噪应用,以Matlab为平台的图像降噪实现过程,并对相应的图像处理结果进��
在基于稀疏和冗余字典的图像降噪算法的基础上,提出了一种基于非局部思想的改进图像降噪算法。与传统的基于稀疏表达的图像降噪算法K-SVD相比,提出的算法增加了一个相似块聚合的过程,使得学习的字典更小且更准确。...
WidsMob Denoise 2021 1.2.0.88 Win/2.18 macOS (图像降噪软件)软件功能: 色度噪声控制 在低饱和度区域设置强色度降噪,在高饱和度区域设置弱降噪。 亮度噪声控制 操纵亮度降噪,消除黑暗区域的噪点,同时完全保留...