首页 > 其他 > 详细

图像处理研究:去污

时间:2015-12-23 15:57:20      阅读:157      评论:0      收藏:0      [点我收藏+]

  近日朋友在做一个跟图像处理相关的项目,问了一些图像处理相关的问题,因为以前对于图像处理也是一知半解,所以就研究了一下图像处理相关的技术。

  首先我们要知道什么是图片?抛开各种各样的图片格式,我认为图片就是一个由不同颜色的像素点组成的二维数组(个人理解)。那么什么又是颜色呢?表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等。因为我是用RGB方式来处理的,所以这里只简单介绍RGB方式,我们知道颜色是通过红(Red),绿(Green),蓝(Blue)三种颜色分量的不同,组合成不同的颜色。所以对图片的处理就是对RGB值大小的处理。

  需求是给定一张图片有污点的图片,如下图。选中有污点的区域—>点击去污—>去除选中区域的污点。

技术分享

  拿到需求先理清楚思路,先选中要去污的区域(获取选中区域的坐标)—>获取背景颜色集合(因为背景色有多个颜色)—>找到污点的坐标集合(这里只是简单的跟背景色对比色差值,跟背景色差值较大的就认定为污点)—>将污点坐标的颜色替换成背景色。下面是根据思路写出来的代码:

      var selectB = test.SelectedBoundingBox;
            List<Color> bgcolors = new List<Color>();
            for (int i = selectB.Top; i < selectB.Top + selectB.Height; i++)
            {
                Color bgc = new Color();
                test.GetPixel(selectB.Left, i, ref bgc);
                if (!bgcolors.Exists((c) => { return c.GetHashCode() == bgc.GetHashCode() || System.Math.Abs(c.Color.ToArgb() - bgc.Color.ToArgb()) > 1000000; }))
                {
                    bgcolors.Add(bgc);
                }
            }

            Random ran = new Random();
            for (int i = selectB.Left; i < selectB.Left + selectB.Width; i++)
            {
                for (int j = selectB.Top; j < selectB.Top + selectB.Height; j++)
                {
                    int bgcIndex = ran.Next(0, bgcolors.Count - 1);
                    Color bgc = new Color();
                    test.GetPixel(i, j, ref bgc);
                    if (System.Math.Abs(bgc.Color.ToArgb() - bgcolors[bgcIndex].Color.ToArgb()) > 530000)
                    {
                        test.SetPixel(i, j, bgcolors[bgcIndex]);
                    }
                }
            }
            test.SaveImage("/temp/1.jpg");

  这里的代码比较简单,相信大家都能看懂,用随机数是为了让替换的背景看起来更加和谐。中间的1000000(用来过滤背景中色差较大的颜色)和530000(用来过滤污点)数字是我这调整后的最佳效果。下面是最终的效果:

技术分享

图像处理研究:去污

原文:http://www.cnblogs.com/KennyGuo/p/5070026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!