图片的处理,一张比较简单的图片, 用扫描仪扫描入去后。 基于此图片内容比较有规律, 所以想实现加工。
(图片里面所有点的像素都是黑色)
图片内容:
长度与宽度都相同的矩形(设宽度为1,长度为2),排成一直线段。 每一个矩形之间的距离为2
形如: --- --- --- --- --- (这里只能表示长度出来,没有显示宽度)但是因为扫描仪,以及原来图片的质量等各方便的原因, 扫描出来的图像肯定会这里一个黑点, 那里一个黑点, 本来应该黑色的, 显示出来的是白色。加工目标如下:把那些疏散的黑点给去掉, 应该黑色的点补回上去。 在人的视觉看上去就好像真的用图像工具软件画上去一样( 与这种效果差不多)请问应该怎样实现
(图片里面所有点的像素都是黑色)
图片内容:
长度与宽度都相同的矩形(设宽度为1,长度为2),排成一直线段。 每一个矩形之间的距离为2
形如: --- --- --- --- --- (这里只能表示长度出来,没有显示宽度)但是因为扫描仪,以及原来图片的质量等各方便的原因, 扫描出来的图像肯定会这里一个黑点, 那里一个黑点, 本来应该黑色的, 显示出来的是白色。加工目标如下:把那些疏散的黑点给去掉, 应该黑色的点补回上去。 在人的视觉看上去就好像真的用图像工具软件画上去一样( 与这种效果差不多)请问应该怎样实现
解决方案 »
- 讨论:关于用winsock进行文件传输的两个小问题
- 谁有利用VB的Mscomm控件进行实时通讯(有接收和发送)的例子?哪位大佬帮帮偶~!谢谢啦
- BLOG更新了一篇关于图像去除噪音的算法,例程及效果图,欢迎大家去看,顶者有分!!!!!!
- 求GetAsyncKeyState这个API的使用,求高手帮忙
- 求助:有关数码相机照片EXIF信息的问题
- 查询字符串怎样超过255字符,立即给分
- 100分求助!急!如何将Collection对象复制到另一个collection对象中?(内详)
- 在VB中,如何用Open打开一个文件后,实现查找出某一特定的字符串?
- 假如一个程序要处理的数据非常多有好的解决办法吗??
- 如何在数据库查询中实现对时间格式数据的模糊查询?
- 在线等!DataGrid代码中设置datasource后怎么调整每一列的宽度呢?
- 请问一个列表框如何获取当前服务器的所有数据库列表
原则就是任何一点的根据它周围各点(包括自身)的值决定,至于取2x2,3x3,5x5,...,请根据你的扫描图的结果取一个阀值。
比如,取5x5矩阵,如果1个点周围有5个或5个以上黑点,则它取黑点,否则取白点
Y = (R + G + B)\3因为人眼对R、G、B三种颜色的视觉强度不同,准确的方法是这样的:
Y = R * 0.299 + G * 0.587 + B * 0.114得到所有像素的亮度,你也就得到了一副该图片的亮度平面(平面是像素某分量的集合)。该灰度图片是8bit的。接着,你要对灰度图片做两值化处理。也就是使图片只存在黑色和白色。两值化一个重要参数是阀值,亮度大于阀值的是白色,小于阀值是黑色。取得阀值的依据是直方图,直方图是每个亮度在图片中出现次数的统计。假设你得到了图片的亮度平面,储存在一个数组Y()中。尽管图片是二维的,但保存它的数组却可以是一维的。某像素点在一维数组位置为I,则I=Y*Width+X。首先定义一个新的数组,该数组保存亮度直方图N()中。N(Y(i))=N(Y(i))+1简单说,直方图是用来统计每个亮度值在图片内出现的次数。如果亮度129这个值在图片里出现了1131次,则直方图元素129的值为1131。对于接近两个亮度的图片,直方图呈现为双峰形。
极端的情况下(只有黑色和白色),则是两根直线。两个山峰之间的谷底就是阀值的最佳点。但不幸的是,由于你的图片可能存在一些不均匀的亮度,因此直方图可能存在比较大的抖动。想自动取得阀值,就需要对直方图做拉普拉斯滤波和一系列运算。取得阀值,并且对图片做两值化处理后,就可以进一步进行开运算和闭运算。首先你要知道什么是膨胀和腐蚀。边缘点的扩张是膨胀、收缩则是腐蚀。什么是边缘点呢?当某点周围存在与该点不同的像素时,该点就是边缘点。腐蚀、膨胀是针对某一值来说的。比如,对于黑色,将所有边缘点设置为黑色,则是黑色的膨胀。将所有边缘点设置为白色,则是黑色的腐蚀。先腐蚀后膨胀为开运算,消除外部的细小点。先膨胀后腐蚀为闭运算,消除内部的细小点。