前段时间的《数字图像处理》课程,期末考核是做一个综合设计题,也就是做一个小项目。因为水平有限,在网上找了很多资料,还在taobao花了10块钱去咨询才完成。现在把这个小项目搬到网上,虽然我的这个程序简单且不具备普适性,但是作为一个参考还是不错的,希望可以帮助到一些人。
题目如下:
这是一幅电器柜上的电表图像,试采用图像处理与分析技术,设计适当的算法和程序,找出电流表所在的区域,提取其指针位置,计算指针与表盘与表盘下沿的夹角,进而判断当前电表的读数(提示:电流表的读数范围为0~400A)。
算法设计:
通过观察可以看出电流表边框区域特别黑(亮度很低),可以先通过全局阈值初步处理,再进行一些初步的处理。
然后利用 regionprops 算法,得到二值图像中每个 8 连通分量(对象)的属性集的测量值,其中包含的信息有三类:
①Area,面积,连通区域的面积
②Centroid,质心,连通区域的质心
③BoundingBox,矩形边界框,一个可以将连通区域包含在内的最小边界框
然后利用参数Area、BoundingBox的来筛选最有可能是电流表的连通区域。就可以得到电流表的连通区域的BoundingBox。
利用这个BoundingBox,创建一个Mask(遮罩)图像,BoundingBox内部的区域为1,外部的区域为0。再使用Mask图像与二值图像进行点乘(.*),就可以将电流表区域分割出来
然后使用 bwmorph 算法提取出图像的骨架。
然后使用算法 hough 、 houghpeaks 、 houghlines 这三个算法来提取出指针并标记出来,观察标记的直线是否是我们想要提取的指针。使用方法在帮助系统中 houghlines 的文档中有示例程序,对示例程序进行适当修改即可。
最后利用 houghlines 返回的结构体 lines 中的theta参数来求取读数。
霍夫变换的学习可以观看这个视频
3.hough transform(霍夫变换直线检测)_哔哩哔哩_bilibili
代码加上注释有些长,不方便直接贴出,这里给出包含源代码以及详细注释的PDF文件,有需要的朋友可以直接拿。
链接:https://pan.baidu.com/s/1tacae35B-rFOkvFEVVc11g
提取码:0808