书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)

       去年开始一直在做一个关于整理藏书的APP,有关于这方面的app目前国内的有一个‘晒书房’,但是没有用到图像处理的相关知识,只有一个扫ISBN码的入口,或者手动录入ISBN;国外有一个‘Shelfie’,不仅可以扫书码,而且可以直接对着书架拍照,进行识别,虽然速度有点慢,但是准确率还是不错的;所以我们期望做一个功能齐全且在速度上有所提升的这样一个书架app。

       关于bookshelf的book recognition,主要分为两大步骤:spine segment,and,recognition;图片的识别,方法有很多,常用的是OCR和库匹配,这里不打算赘述,主要回顾一下关于书脊的切割算法,做下总结;

(注:本app主要适用场景为家里的书架,图书馆,甚至是手头上有几本书的情况都可以;考虑到书的摆放可以有很多种,但主要是竖直摆放的居多,但也不乏书架杂乱摆放的情况,因此大抵可以分为四种情况,竖直,水平,稍向左倾斜,稍向右倾斜,其实看得出主要是一个角度的问题。)

       step1:预处理,包括图片缩放,灰度化,自适应的直方图均衡化,边缘提取等;

       step2:(书脊)直线检测,这里是关键,直线的好坏与多少直接影响着后续的切割结果;直线检测的方法也有很多,我们在实践中尝试了三种方法,分别是,

1)cv自带的直线检测算子;

 书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)_第1张图片

图a

书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)_第2张图片

图b 为看的清晰,直接显示在黑色背景图上

2)cv自带的houghline;

书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)_第3张图片

图c


图d

3)自己改写的hough线检测;

       书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)_第4张图片

图e my

书籍切割之书脊边界直线检测算法小结(bookSpines Segmentation)_第5张图片

图f matlab

         通过比较,不难发现,法1得到的直线比较杂乱,比较零碎,得根据需要按照angle和length进行过滤,并需要分块和拟合,不利于后续的工作,需要大量的去重(去重又是一个坑,哈哈)工作;法2得到的效果并不理想,边缘的书脊会检出很多的非书脊edge直线,并且对于图c这样的书脊,效果异常的差,跟matlab的houghline简直没法比;法3是根据峰值检测的思想,自己实现并改写了的hough,效果可以跟matlab的媲美,甚至超过,并且这样出来的直线对后面的去重压力会降低非常多,因为直线比较整齐干净;

        ste3:直线排序;

        step4:切割Segment,即find书脊PR框;如果按照原始得到的hough直线来进行切割的话,可能会出现书脊两端出现多余的部分,而我们并不需要这些非书脊的部分,我们要找到真正属于书脊的有效部分,所以需要进行切割,切割的方法是能量生长法;能量生长的主要思想就是从一个最小的投影矩形开始(书脊的中间一小部分),根据两端矩形直线的energy值大小来判断是否停止生长还是继续生长;

        最后,贴上Segment结果!!

                                                                          

转载请注明出处,谢谢合作!!


你可能感兴趣的:(APP,图像处理,书脊切割,藏书整理)