AForge学习笔记.docx
《AForge学习笔记.docx》由会员分享,可在线阅读,更多相关《AForge学习笔记.docx(16页珍藏版)》请在冰豆网上搜索。
AForge学习笔记
AForge学习笔记:
[1]AForge.Imaging.Filters
∙|
AdaptiveSmoothing:
图像平滑处理,用于对图像进行适度的平滑,再平滑噪声的条件下保留边缘效应,实现如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\0.jpg");
Bitmapbt1=bt.Clone(newRectangle(newPoint(0,0),bt.Size),bt.PixelFormat);
pictureBox1.Image=bt;
//createfilter
AForge.Imaging.Filters.AdaptiveSmoothingfilter=newAForge.Imaging.Filters.AdaptiveSmoothing();
//applythefilter
filter.ApplyInPlace(bt1);
结果如下图所示。
Add:
将原始图像和叠置图像像素相加得到新图像,我们通过红色+黄色=橙色来展示运行结果:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
Bitmapbt1=newBitmap(@"C:
\Users\GAOXIANG\Desktop\2.jpg");
//创建过滤器
AForge.Imaging.Filters.Addfilter=newAForge.Imaging.Filters.Add(bt);
//图像相加
BitmapresultImage=filter.Apply(bt1);
运行结果如下图。
AdditiveNoise:
通俗的翻译,我们可以理解为添加剂噪声滤波器,在原始图像的像素中添加一个随机值,随机值由IRandomNumberGenerator生成,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
pictureBox1.Image=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
//创建随机数组
IRandomNumberGeneratorgenerator=newUniformGenerator(newRange(-50,50));
//创建过滤器
AForge.Imaging.Filters.AdditiveNoisefilter=newAForge.Imaging.Filters.AdditiveNoise(generator);
//图像处理
filter.ApplyInPlace(bt);
运行结果如下。
BackwardQuadrilateralTransformation:
后向四边形转换,可以实现将原始图像转换到目标图像的四边形区域当中,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
Bitmapbt1=newBitmap(@"C:
\Users\GAOXIANG\Desktop\2.jpg");
//定义四边形角点
Listcorners=newList();
corners.Add(newIntPoint(99,99));
corners.Add(newIntPoint(156,79));
corners.Add(newIntPoint(184,126));
corners.Add(newIntPoint(122,150));
//createfilter
AForge.Imaging.Filters.BackwardQuadrilateralTransformationfilter=newAForge.Imaging.Filters.BackwardQuadrilateralTransformation(bt,corners);
//applythefilter
BitmapnewImage=filter.Apply(bt1);
运行结果:
BayerDithering:
基于Bayer矩阵的图像有序抖动,实现如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
Bitmapbt1=bt.Clone(newRectangle(newPoint(0,0),bt.Size),PixelFormat.Format8bppIndexed);
//创建过滤器
AForge.Imaging.Filters.BayerDitheringfilter=newAForge.Imaging.Filters.BayerDithering();
//图像过滤
filter.ApplyInPlace(bt1);
运行结果:
BayerFilter:
通过色彩传感器建立色彩矩阵将灰度图转为彩色图。
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\3.jpg");
//Bitmapbt1=bt.Clone(newRectangle(newPoint(0,0),bt.Size),PixelFormat.Format8bppIndexed);
//生成过滤器
BayerFilterfilter=newBayerFilter();
//applythefilter
BitmaprgbImage=filter.Apply(bt);
运行结果:
BilateralSmoothing:
使用色彩和空间因子进行保存边缘效应,消除噪声的双向平滑。
示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\2.jpg");
//createfilter
AForge.Imaging.Filters.BilateralSmoothingfilter=newAForge.Imaging.Filters.BilateralSmoothing();
filter.KernelSize=7;
//空间因子
filter.SpatialFactor=10;
//色彩因子
filter.ColorFactor=60;
filter.ColorPower=0.5;
//applythefilter
filter.ApplyInPlace(bt);
运行结果:
BlobsFiltering:
将一定大小的对象剔除,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.bmp");
//创建过滤器
AForge.Imaging.Filters.BlobsFilteringfilter=newAForge.Imaging.Filters.BlobsFiltering();
//设置过滤条件(对象长、宽至少为70)
filter.CoupledSizeFiltering=true;
filter.MinWidth=100;
filter.MinHeight=80;
filter.ApplyInPlace(bt);
运行结果:
Blur:
对图像实施模糊变换。
BradleyLocalThresholding:
局部阈值处理,当像素值比邻近窗体所有像素的均值低百分之t时将该点取为黑,否者均为白。
示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\2.jpg");
AForge.Imaging.Filters.BradleyLocalThresholdingfilter=newAForge.Imaging.Filters.BradleyLocalThresholding();
filter.ApplyInPlace(bt);
运行结果:
BrightnessCorrection:
灰度矫正,若输入的矫正数p为正,则将输入图像灰度值范围变换为【0,255-p】,输出范围为【p,255】,当为负时输入范围【-p,255】,输出范围【0,255-p】。
CannyEdgeDetector:
使用Canny边缘检测算子检测边缘,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
Bitmapbt1=bt.Clone(newRectangle(newPoint(0,0),bt.Size),System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
AForge.Imaging.Filters.CannyEdgeDetectorfilter=newAForge.Imaging.Filters.CannyEdgeDetector();
filter.ApplyInPlace(bt1);
运行结果:
CanvasCrop,CanvasFill,CanvasMove:
对特定区域进行色彩填充,或对图像进行整体移动。
ChannelFiltering:
对彩色图像RGB通道进行灰度过滤,在某以特定范围的至将被保留或去除,使用如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
AForge.Imaging.Filters.ChannelFilteringfilter=newAForge.Imaging.Filters.ChannelFiltering();
//确定通道过滤范围
filter.Red=newIntRange(0,255);
filter.Green=newIntRange(100,255);
filter.Blue=newIntRange(100,255);
filter.ApplyInPlace(bt);
运行结果:
Closing:
方法:
对图像中的单个对象进行膨胀,在进行侵蚀,由于膨胀会使本来不相连的独立对象相互连接,使得即是侵蚀也依旧能保持对象的相连状态。
ColorRemapping:
与LevelsLinear不同,ColorRemapping可以对图像进行非线性变换,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
byte[]map=newbyte[256];
for(inti=0;i<256;i++)
{
map[i]=(byte)Math.Min(255,Math.Pow(2,(double)i/32));
}
//createfilter
AForge.Imaging.Filters.ColorRemappingfilter=newAForge.Imaging.Filters.ColorRemapping(map,map,map);
//applythefilter
filter.ApplyInPlace(bt);
运行结果:
Connectedcomponentslabeling:
通过为不同对象去不同颜色来区别图像中的不同部分。
ConservativeSmoothing:
使用矩阵窗口在图像中搜索,将窗口中最小或最大值用平均值来代替以此消除噪声。
Convolution:
卷积操作,通过设置不同的卷积矩阵获得不同的图像处理效果,如下面示例:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
pictureBox1.Image=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
//定义卷积核
int[,]kernel={
{-2,-1, 0},
{-1, 1, 1},
{ 0, 1, 2}};
//创建过滤器
AForge.Imaging.Filters.Convolutionfilter=newAForge.Imaging.Filters.Convolution(kernel);
filter.ApplyInPlace(bt);
运行结果:
CornersMarker:
通过角点算法探测并高亮显示角点,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.bmp");
//createcornerdetector'sinstance
SusanCornersDetectorscd=newSusanCornersDetector();
//createcornermakerfilter
AForge.Imaging.Filters.CornersMarkerfilter=newAForge.Imaging.Filters.CornersMarker(scd,Color.Black);
//applythefilter
filter.ApplyInPlace(bt);
运行结果:
Crop:
对原始图像确定矩形边界点并生成新图。
Difference:
原始图像与叠置图像的差分运算。
DifferenceEdgeDetector:
在四方向上计算像素的差分最大值,因此获得边缘线(原始图像为灰度图),示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
pictureBox2.Image=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
//createfilter
AForge.Imaging.Filters.DifferenceEdgeDetectorfilter=newAForge.Imaging.Filters.DifferenceEdgeDetector();
//applythefilter
filter.ApplyInPlace(bt);
运行结果:
Dilatation:
膨胀算法,原理十分简单,去一定的临近像素,并将;临近像素最大值赋给当前像素。
Edges:
简单的边缘探测。
Erosion:
图像侵蚀,与膨胀算法完全相反,将临近像素最小值赋给当前点。
EuclideanColorFiltering:
欧几里德色彩过滤,使用RGB球体对色彩进行过滤。
ExtractBiggestBlob:
从图像中裁剪出最大的对象。
ExtractChannel:
获得彩色图像中的一个通道,并返回灰度图像。
FillHoles:
用于填补空洞。
FilterIterator:
用于过滤迭代操作,该类本身并未实现过滤功能,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
FiltersSequencefilterSequence=newFiltersSequence();
filterSequence.Add(newHitAndMiss(
newshort[,]{{0,0,0},{-1,1,-1},{1,1,1}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{-1,0,0},{1,1,0},{-1,1,-1}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{1,-1,0},{1,1,0},{1,-1,0}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{-1,1,-1},{1,1,0},{-1,0,0}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{1,1,1},{-1,1,-1},{0,0,0}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{-1,1,-1},{0,1,1},{0,0,-1}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{0,-1,1},{0,1,1},{0,-1,1}},
HitAndMiss.Modes.Thinning));
filterSequence.Add(newHitAndMiss(
newshort[,]{{0,0,-1},{0,1,1},{-1,1,-1}},
HitAndMiss.Modes.Thinning));
//进行十次迭代
AForge.Imaging.Filters.FilterIteratorfilter=newAForge.Imaging.Filters.FilterIterator(filterSequence,10);
BitmapnewImage=filter.Apply(bt);
运行结果:
GammaCorrection:
基于公式:
V(output)=V(input)^g,g为改正系数。
GaussianBlur,GaussianSharpen:
高斯模糊,高思锐化。
Grayscale:
图像的灰度变换,R\G\B三通道以一定的比值求和获得像素灰度值。
GrayscaleToRGB:
将灰度图转换为彩色图。
HistogramEqualization:
直方图均衡化,示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
//创建过滤器
AForge.Imaging.Filters.HistogramEqualizationfilter=newAForge.Imaging.Filters.HistogramEqualization();
filter.ApplyInPlace(bt);
运行结果:
HomogenityEdgeDetector:
边缘探测。
IterativeThreshold:
迭代阈值法,最后生成非黑即白的图像,具体算法过程为:
1)设定初始阈值,小于阈值取背景色,大于阈值取对象色2)阈值的一半继续迭代运算3)当上一阈值与本阈值只差绝对值小于某值时停止运算。
OilPainting:
处理原理很简单:
首先确定一定的搜索面积,在搜索区域内寻找出现频率最高的灰度值,找到后将其值赋值给当前搜索中心像素。
示例如下:
Bitmapbt=newBitmap(@"C:
\Users\GAOXIANG\Desktop\1.jpg");
//确定画笔为15
OilPaintingfilter=newOilPainting(30);
//applythefilter
filter.ApplyInPlace(bt);
运行结果:
Opening:
相当于对图像先进行侵蚀后进行膨胀。
Pixellate:
通过产生一定的矩形大小,使矩形中的像素具有相同的像素值,以此产生类似于马赛克的图像效果。
QuadrilateralTransformation:
提取原图像中的四边形区域的图像信息。
StereoAnaglyph:
用于产生立体视图,提供的初始影像应当具有不同的视角,示例如下:
//createfilter
StereoAnaglyphfilter=newStereoAnaglyph();
//setrightimageasoverlay
filter.Overlay=rightImage
//applythefilter(providingleftimage)
BitmapresultImage=filter.Apply(leftImage);
运行结果:
TexturedFilter:
为图片创建纹理。
Threshold:
基于特定阈值的图像二值化,当像素值大于阈值,为白色,小于阈值则取黑色。
WaterWave:
使图像具有水波纹效果。