作者:GAO-XIANG
转自:http://blog.youkuaiyun.com/xiang__jiangsu/article/details/8144304
AdaptiveSmoothing:图像平滑处理,用于对图像进行适度的平滑,再平滑噪声的条件下保留边缘效应,实现如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\0.jpg");
Bitmap bt1 = bt.Clone(new Rectangle(new Point(0,0),bt.Size),bt.PixelFormat);
pictureBox1.Image = bt;
// create filter
AForge.Imaging.Filters.AdaptiveSmoothing filter = new AForge.Imaging.Filters.AdaptiveSmoothing();
// apply the filter
filter.ApplyInPlace(bt1);
运行结果:
Add :将原始图像和叠置图像像素相加得到新图像,我们通过红色+黄色=橙色来展示运行结果:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
Bitmap bt1 = new Bitmap(@"C:\Users\GAOXIANG\Desktop\2.jpg");
// 创建过滤器
AForge.Imaging.Filters.Add filter = new AForge.Imaging.Filters.Add(bt);
//图像相加
Bitmap resultImage = filter.Apply(bt1);
运行结果:
AdditiveNoise:通俗的翻译,我们可以理解为添加剂噪声滤波器,在原始图像的像素中添加一个随机值,随机值由IRandomNumberGenerator生成,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
pictureBox1.Image = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
// 创建随机数组
IRandomNumberGenerator generator = new UniformGenerator(new Range(-50, 50));
// 创建过滤器
AForge.Imaging.Filters.AdditiveNoise filter = new AForge.Imaging.Filters.AdditiveNoise(generator);
// 图像处理
filter.ApplyInPlace(bt);
运行结果:
BackwardQuadrilateralTransformation:后向四边形转换,可以实现将原始图像转换到目标图像的四边形区域当中,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
Bitmap bt1 = new Bitmap(@"C:\Users\GAOXIANG\Desktop\2.jpg");
// 定义四边形角点
List<IntPoint> corners = new List<IntPoint>();
corners.Add(new IntPoint(99, 99));
corners.Add(new IntPoint(156, 79));
corners.Add(new IntPoint(184, 126));
corners.Add(new IntPoint(122, 150));
// create filter
AForge.Imaging.Filters.BackwardQuadrilateralTransformation filter = new AForge.Imaging.Filters.BackwardQuadrilateralTransformation(bt, corners);
// apply the filter
Bitmap newImage = filter.Apply(bt1);
运行结果:
BayerDithering:基于Bayer 矩阵的图像有序抖动,实现如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
Bitmap bt1 = bt.Clone(new Rectangle(new Point(0,0),bt.Size),PixelFormat.Format8bppIndexed);
// 创建过滤器
AForge.Imaging.Filters.BayerDithering filter = new AForge.Imaging.Filters.BayerDithering();
// 图像过滤
filter.ApplyInPlace(bt1);
运行结果:
BayerFilter:通过色彩传感器建立色彩矩阵将灰度图转为彩色图。
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\3.jpg");
//Bitmap bt1 = bt.Clone(new Rectangle(new Point(0,0),bt.Size),PixelFormat.Format8bppIndexed);
// 生成过滤器
BayerFilter filter = new BayerFilter();
// apply the filter
Bitmap rgbImage = filter.Apply(bt);
运行结果:
BilateralSmoothing:使用色彩和空间因子进行保存边缘效应,消除噪声的双向平滑。示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\2.jpg");
// create filter
AForge.Imaging.Filters.BilateralSmoothing filter = new AForge.Imaging.Filters.BilateralSmoothing();
filter.KernelSize = 7;
//空间因子
filter.SpatialFactor = 10;
//色彩因子
filter.ColorFactor = 60;
filter.ColorPower = 0.5;
// apply the filter
filter.ApplyInPlace(bt);
运行结果:
BlobsFiltering:将一定大小的对象剔除,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.bmp");
// 创建过滤器
AForge.Imaging.Filters.BlobsFiltering filter = new AForge.Imaging.Filters.BlobsFiltering();
// 设置过滤条件(对象长、宽至少为70)
filter.CoupledSizeFiltering = true;
filter.MinWidth = 100;
filter.MinHeight = 80;
filter.ApplyInPlace(bt);
运行结果:
Blur:对图像实施模糊变换。
BradleyLocalThresholding:局部阈值处理,当像素值比邻近窗体所有像素的均值低百分之t 时将该点取为黑,否者均为白。示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\2.jpg");
AForge.Imaging.Filters.BradleyLocalThresholding filter = new AForge.Imaging.Filters.BradleyLocalThresholding();
filter.ApplyInPlace(bt);
运行结果:
BrightnessCorrection :灰度矫正,若输入的矫正数p为正,则将输入图像灰度值范围变换为【0,255-p】,输出范围为【p,255】,当为负时输入范围【-p,255】,输出范围【0,255-p】。
CannyEdgeDetector:使用Canny边缘检测算子检测边缘,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
Bitmap bt1 = bt.Clone(new Rectangle(new Point(0, 0), bt.Size), System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
AForge.Imaging.Filters.CannyEdgeDetector filter = new AForge.Imaging.Filters.CannyEdgeDetector();
filter.ApplyInPlace(bt1);
运行结果:
CanvasCrop,CanvasFill,CanvasMove:对特定区域进行色彩填充,或对图像进行整体移动。
ChannelFiltering:对彩色图像RGB通道进行灰度过滤,在某以特定范围的至将被保留或去除,使用如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
AForge.Imaging.Filters.ChannelFiltering filter = new AForge.Imaging.Filters.ChannelFiltering();
// 确定通道过滤范围
filter.Red = new IntRange(0, 255);
filter.Green = new IntRange(100, 255);
filter.Blue = new IntRange(100, 255);
filter.ApplyInPlace(bt);
运行结果:
Closing:方法:对图像中的单个对象进行膨胀,在进行侵蚀,由于膨胀会使本来不相连的独立对象相互连接,使得即是侵蚀也依旧能保持对象的相连状态。
ColorRemapping:与LevelsLinear不同,ColorRemapping可以对图像进行非线性变换,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
byte[] map = new byte[256];
for (int i = 0; i < 256; i++)
{
map[i] = (byte)Math.Min(255, Math.Pow(2, (double)i / 32));
}
// create filter
AForge.Imaging.Filters.ColorRemapping filter = new AForge.Imaging.Filters.ColorRemapping(map, map, map);
// apply the filter
filter.ApplyInPlace(bt);
运行结果:
Connectedcomponentslabeling:通过为不同对象去不同颜色来区别图像中的不同部分。
ConservativeSmoothing:使用矩阵窗口在图像中搜索,将窗口中最小或最大值用平均值来代替以此消除噪声。
Convolution :卷积操作,通过设置不同的卷积矩阵获得不同的图像处理效果,如下面示例:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
pictureBox1.Image = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
// 定义卷积核
int[,] kernel = {
{ -2, -1, 0 },
{ -1, 1, 1 },
{ 0, 1, 2 } };
//创建过滤器
AForge.Imaging.Filters.Convolution filter = new AForge.Imaging.Filters.Convolution(kernel);
filter.ApplyInPlace(bt);
运行结果:
CornersMarker :通过角点算法探测并高亮显示角点,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.bmp");
// create corner detector's instance
SusanCornersDetector scd = new SusanCornersDetector();
// create corner maker filter
AForge.Imaging.Filters.CornersMarker filter = new AForge.Imaging.Filters.CornersMarker(scd, Color.Black);
// apply the filter
filter.ApplyInPlace(bt);
运行结果:
Crop :对原始图像确定矩形边界点并生成新图。
Difference :原始图像与叠置图像的差分运算。
DifferenceEdgeDetector:在四方向上计算像素的差分最大值,因此获得边缘线(原始图像为灰度图),示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
pictureBox2.Image = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
// create filter
AForge.Imaging.Filters.DifferenceEdgeDetector filter = new AForge.Imaging.Filters.DifferenceEdgeDetector();
// apply the filter
filter.ApplyInPlace(bt);
运行结果:
Dilatation:膨胀算法,原理十分简单,去一定的临近像素,并将;临近像素最大值赋给当前像素。
Edges:简单的边缘探测。
Erosion :图像侵蚀,与膨胀算法完全相反,将临近像素最小值赋给当前点。
EuclideanColorFiltering:欧几里德色彩过滤,使用RGB球体对色彩进行过滤。
ExtractBiggestBlob:从图像中裁剪出最大的对象。
ExtractChannel:获得彩色图像中的一个通道,并返回灰度图像。
FillHoles:用于填补空洞。
FilterIterator:用于过滤迭代操作,该类本身并未实现过滤功能,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
FiltersSequence filterSequence = new FiltersSequence();
filterSequence.Add(new HitAndMiss(
new short[,] { { 0, 0, 0 }, { -1, 1, -1 }, { 1, 1, 1 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { -1, 0, 0 }, { 1, 1, 0 }, { -1, 1, -1 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { 1, -1, 0 }, { 1, 1, 0 }, { 1, -1, 0 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { -1, 1, -1 }, { 1, 1, 0 }, { -1, 0, 0 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { 1, 1, 1 }, { -1, 1, -1 }, { 0, 0, 0 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { -1, 1, -1 }, { 0, 1, 1 }, { 0, 0, -1 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { 0, -1, 1 }, { 0, 1, 1 }, { 0, -1, 1 } },
HitAndMiss.Modes.Thinning));
filterSequence.Add(new HitAndMiss(
new short[,] { { 0, 0, -1 }, { 0, 1, 1 }, { -1, 1, -1 } },
HitAndMiss.Modes.Thinning));
// 进行十次迭代
AForge.Imaging.Filters.FilterIterator filter = new AForge.Imaging.Filters.FilterIterator(filterSequence, 10);
Bitmap newImage = filter.Apply(bt);
运行结果:
GammaCorrection:基于公式:V(output)=V(input)^g,g为改正系数。
GaussianBlur,GaussianSharpen:高斯模糊,高思锐化。
Grayscale :图像的灰度变换,R\G\B三通道以一定的比值求和获得像素灰度值。
GrayscaleToRGB:将灰度图转换为彩色图。
HistogramEqualization:直方图均衡化,示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
// 创建过滤器
AForge.Imaging.Filters.HistogramEqualization filter = new AForge.Imaging.Filters.HistogramEqualization();
filter.ApplyInPlace(bt);
运行结果:
HomogenityEdgeDetector :边缘探测。
IterativeThreshold:迭代阈值法,最后生成非黑即白的图像,具体算法过程为:1)设定初始阈值,小于阈值取背景色,大于阈值取对象色 2)阈值的一半继续迭代运算 3)当上一阈值与本阈值只差绝对值小于某值时停止运算。
OilPainting:处理原理很简单:首先确定一定的搜索面积,在搜索区域内寻找出现频率最高的灰度值,找到后将其值赋值给当前搜索中心像素。示例如下:
Bitmap bt = new Bitmap(@"C:\Users\GAOXIANG\Desktop\1.jpg");
// 确定画笔为15
OilPainting filter = new OilPainting(30);
// apply the filter
filter.ApplyInPlace(bt);
运行结果:
Opening:相当于对图像先进行侵蚀后进行膨胀。
Pixellate:通过产生一定的矩形大小,使矩形中的像素具有相同的像素值,以此产生类似于马赛克的图像效果。
QuadrilateralTransformation:提取原图像中的四边形区域的图像信息。
StereoAnaglyph:用于产生立体视图,提供的初始影像应当具有不同的视角,示例如下:
// create filter
StereoAnaglyph filter = new StereoAnaglyph( );
// set right image as overlay
filter.Overlay = rightImage
// apply the filter (providing left image)
Bitmap resultImage = filter.Apply( leftImage );
运行结果:
TexturedFilter:为图片创建纹理。
Threshold:基于特定阈值的图像二值化,当像素值大于阈值,为白色,小于阈值则取黑色。
WaterWave:使图像具有水波纹效果。