[计算机视觉] A4纸边缘检测 |
您所在的位置:网站首页 › 坐标纸图片a4 › [计算机视觉] A4纸边缘检测 |
这次作业真的是
先把作业要求放上来吧:
(输入图像的红色部分仅为马赛克处理哈,原输入图像不存在)
好,那接下来po一下做出的效果图:
(边缘有点细_(:зゝ∠)_,得仔细看才能看出。用时也给出来了,四舍五入后 1张图片的处理到最后显示只用9秒。)
为什么提了时间呢?因为上面也提到了,输入图像的分辨率大得感人啊
处理步骤: 1、先对输入图像进行灰度化处理,再按一定比例下采样(即对图像插值压缩) 2、利用上一次作业的Canny算法提取边缘(得到的边缘有噪点且不完整) 3、对ImageSpace做HoughSpace(极坐标)变换,并做voting投票(矩阵累加) 4、对累加矩阵取最大的一些值,得到边缘直线的斜率、截距,并画出边缘直线 5、求每两条直线之间交点,并累计该交点的直线交叉次数 6、取交叉次数最多的4个点,即为A4纸的四个顶点 7、把顶点坐标上采样并放回原图,最后4个顶点之间连线,形成边缘
步骤详细解释: 1、先对输入图像进行灰度化处理,再按一定比例下采样(即对图像插值压缩): (1)灰度化处理:这个不用详细说了,都是数字图像的处理方法。灰度转化公式I = r * 0.299 + g * 0.587 + b * 0.114。 (2)下采样:由于原图是3120*4208的分辨率,刚好都是8的倍数,所以我通过插值将宽高都变成原来的1/8,即390*526。插值方法网上很多教程啦,自己找下吧 @问题@:为什么可以进行下采样?会有精度丢失吗? @回答@:(这纯属我个人理解哈)首先,做下采样肯定是为了提高减少运行时间啦,上面也提到了处理分辨率如此高的一张图片最后只用了9 秒。而说到精度,精度丢失肯定会有的啦~~只是可以设想一下,如果原来边缘在图像的高度的1/4处,那我不管怎么放大缩小,那边缘还是在图像的高度的1/4处啊~~从上面的处理结果来看,其实效果我觉得还是可以的,虽然有一定误差,但是应该在可以接受的范围吧_(:зゝ∠)_
步骤1结果(这步骤都是简单的图像处理,所以就不放代码啦~~):
2、利用上一次作业的Canny算法提取边缘(得到的边缘有噪点且不完整): 我上次的作业改的code0的代码啊。400多行,就不放上来了_(:зゝ∠)_ 改一下那份代码就能用了。
步骤2结果:
3、对ImageSpace做HoughSpace(极坐标)变换,并做voting投票 课件上有介绍直接的Hough坐标变化b = -x * m + y(不用极坐标),但是输入图像的很多直线的截距b都特别大(最大的接近1w),这样的累加矩阵就会很大很大!所以我用了极坐标控制矩阵大小。变换及几何意义如下:
好了,有了这些几何知识就可以编码了。先声明一个累加矩阵:360 * ((x + y) * 2)。宽360是360度,高原来又平方又开方太复杂了,所以直接用更大(可接受范围)的矩阵,乘2倍,是把负的部分平移上来可以累加。 然后编码思路:先在canny提取的边缘图像上,对于边缘点得到x、y。然后在Hough空间,对每一个θ,由x、y计算出ρ: void HoughEdgeDetect::HoughTransAndDetectEdge() { cimg_forXY(SrcCannyImg, x, y) { if (SrcCannyImg(x, y, 0) == 255) { //cout |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |