「玩一玩」绘制投影直方图(我希望各位需要的能自己动手写下)我在这篇《字符识别练习 分拆字符(验证码、车牌号、
「玩一玩」绘制投影直方图(我希望各位需要的能自己动手写下) 我在这篇《字符识别练习 分拆字符(验证码、车牌号、身份证号等)》帖子里用到了图像的投影直方图,然后就有不少筒子跟帖「求源码」。 你们可知道?我真心希望你们阅读下我给出的参考文献,自己动脑思考下,自己动手尝试下? 做这个直方图真的一点都不难啊,怎么就养成了有原理不思考,上来就要看源码的习惯呢?也许我不是专业人士,理解不了。我的认知里面,看源码还不如看原理清晰,看到原理我可以构思出个大概,用我自己的方式来实现。看源码,我的思路完全被禁锢在作者的思路里,遇上写作习惯差的,还能把脑袋绕晕。 下面我详解下怎么做。一看就明白了,真的很简单。 以下代码并非最佳效率,但可以说是最简单的,追求效率或者其他的自行改造。 投影直方图 projection histogram 从形式上看,是这样的(黑白样本): 放大看就类似于这样: 也就是说将样本图的每一列(以垂直投影为例),投影到直方图的某个坐标x上。 最简单的实现方法就来了: 变量: Bitmap bmp (Width x Height) int histo[Width] 1.遍历样本的每一点bmp.GetPixel(x,y) 2.如果颜色为黑,那么histo[x]++ 3.统计完成,开始绘制
C# code for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { Color color = bmp.GetPixel(x, y); if (color.R < 50 && color.G < 50 && color.B < 50) histo[x]++; } } 绘制直方图
绘制直方图非常简单,只需要遍历每个histo[x]的值,即可
1.从y=height到y=height-histo[x]绘制一列线条
2.遍历histo[],直到画完所有点
C# code Bitmap tmp = new Bitmap(bmp.Width, bmp.Height); using (Graphics g = Graphics.FromImage(tmp)) for (int i = 0; i < bmp.Width; i++) { g.DrawLine( Pens.Black, i, tmp.Height, i, tmp.Height - histo[i]); } 完成了。
完整代码(黑白样本)
C# code Bitmap getProjectHistogram(Bitmap bmp) { int width = bmp.Width; int height = bmp.Height; int[] histo = null; histo = new int[width]; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) { Color color = bmp.GetPixel(x, y); if (color.R < 50 && color.G < 50 && color.B < 50) histo[x]++; } // draw Bitmap tmp = new Bitmap(width, height); using (Graphics g = Graphics.FromImage(tmp)) for (int i = 0; i < width; i++) g.DrawLine( Pens.Black, i, height, i, height - histo[i]); return tmp; } mutation
可以使用多个histo[]数组分别储存各个通道(A、R、G、B)的投影直方图(如果是彩色图像的话)
欢迎各位贴出自己的成果。
[解决办法] 先顶一下吧
[解决办法] 明白了,相当于各个像素点在重力的作用下堆积起来了。
[解决办法] 谁用C#处理过tiff格式的图片?
[解决办法] 有处理过tif格式图片的加QQ:497537705
[解决办法] 赞一个,谢谢lz,呵呵
[解决办法] 希望lz再接再厉,呵呵
[解决办法] 下载点击
给大家提供一份中文论文,无私提供,0分下载,大家速度哦,亲!
------解决方案--------------------
赞一个,谢谢lz,呵呵
[解决办法] thank you first!
[解决办法] 感谢分享。
[解决办法] 谢谢分享.
[解决办法] 不错啊
[解决办法] 不错啊
[解决办法] 探讨 下载点击 给大家提供一份中文论文,无私提供,0分下载,大家速度哦,亲![解决办法] 支持分享
[解决办法] 谢谢分享!!
[解决办法] 谢谢楼主分享 学习了
[解决办法] 感谢楼主分享,收藏,学习!
[解决办法] 感谢楼主分享,收藏,学习!
[解决办法] 好!好好!!
[解决办法] 顶一个 努力
[解决办法] 向你学习!!!!
[解决办法] 感谢分享
[解决办法] 有处理过tif格式图片的加QQ:497537705
[解决办法] 谢谢分享
[解决办法] 希望lz再接再厉,呵呵
[解决办法] 顶一个很不错啊
[解决办法] 楼主真牛,赞一个
[解决办法] 挺不错的一篇帖子,虽然只是图像直方图的处理,给人眼前一新的感觉!赞一个!!!
[解决办法] 每次来的时候都能看到楼主分享的好东西。
[解决办法] 我挺菜鸟的..............
[解决办法] 原来是这样啊,难怪开始看得晕晕的。顶一下!
探讨 补充下: 参考这张图和2楼的发言。 想象俄罗斯方块,样本图被分为一列一列的,然后这时全部按像素散开,那么在「重力」影响下,所有的小「方块」都纷纷往下落,最后叠在一起,就成为了投影直方图。[解决办法] 明白了,相当于各个像素点在重力的作用下堆积起来了。
[解决办法] 呵呵,最原始的识别算法
〈和〉、\和∕ 是一样的
[解决办法] 学习了 强啊
[解决办法] 赞一个,谢谢lz,呵呵
[解决办法] 赞一个,谢谢lz,呵呵
[解决办法] 看了你的贴,终于明白什么是直方图了
[解决办法] 探讨 下载点击 给大家提供一份中文论文,无私提供,0分下载,大家速度哦,亲!------解决方案--------------------
顶起,不错,很好
[解决办法] 原来如此,谢谢了
[解决办法] 不错!
[解决办法] 我在想复原的事儿,得有个参数保存下落了多少之类的吧。。还是一般直方图其实都是没法复原的。。。
[解决办法] 2010真是水
[解决办法] 楼主牛人,学习了
[解决办法] 不错阿~
顶一下
[解决办法] 感谢楼主分享啊!!!
[解决办法] 感谢楼主分享啊!!!
[解决办法] 感谢楼主分享啊!!!
[解决办法] 探讨 我在这篇《字符识别练习 分拆字符(验证码、车牌号、身份证号等)》帖子里用到了图像的投影直方图,然后就有不少筒子跟帖「求源码」。 你们可知道?我真心希望你们阅读下我给出的参考文献,自己动脑思考下,自己动手尝试下? 做这个直方图真的一点都不难啊,怎么就养成了有原理不思考,上来就要看源码的习惯呢?也许我不是专业人士,理解不了。我的认知里面,看源码还不如看原理清晰,看到原理我可以构思出个大概,用我自己……[解决办法] 向你学习!!!!
[解决办法] 看都看不懂。。太悲剧了
[解决办法] 看不懂。。太悲剧了
[解决办法] 不错,好东西
[解决办法] 今天刚好考Matlab
[解决办法] 绘制直方图非常简单,只需要遍历每个histo[x]的值,即可
1.从y=height到y=height-histo[x]绘制一列线条
2.遍历histo[],直到画完所有点
其中1.从y=height到y=height-histo[x]绘制一列线条肿么回事啊?我咋认为是从y=0到y=histo[x]绘制一列线条呢,lz求解释啊,尽量详细点哈,我有点笨,太模糊了怕理解不了,谢谢!!!
[解决办法] 处理图片用bitmapdata 速度会比GetPixel 快很多
[解决办法] 楼主真牛,赞一个
[解决办法] 探讨 [解决办法] 不错,感谢楼主分享。
[解决办法] 原来直方图是这样的意思啊
[解决办法] 这么做计算量太大,无法实际应用
[解决办法] 支持分享。。。。
[解决办法] 好棒啊楼主!
[解决办法] 这些代码可以啊 我 总感觉好像缺少了点什么东西啊
[解决办法] 好东西、应该学习、认真把文献看完
[解决办法] 支持分享
[解决办法] 探讨 我在这篇《字符识别练习 分拆字符(验证码、车牌号、身份证号等)》帖子里用到了图像的投影直方图,然后就有不少筒子跟帖「求源码」。 你们可知道?我真心希望你们阅读下我给出的参考文献,自己动脑思考下,自己动手尝试下? 做这个直方图真的一点都不难啊,怎么就养成了有原理不思考,上来就要看源码的习惯呢?也许我不是专业人士,理解不了。我的认知里面,看源码还不如看原理清晰,看到原理我可以构思出个大概,用我自己……------解决方案--------------------
很好 支持