AForge学习笔记(10):AForge.Imaging.Filters

来源:互联网 发布:生死狙击刷金币软件 编辑:程序博客网 时间:2024/05/17 22:49

作者:GAO-XIANG

转自:http://blog.csdn.net/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:使图像具有水波纹效果。



1 0