继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

图像拐点检测-原理以及代码实现

慕田峪9129951
关注TA
已关注
手记 337
粉丝 200
获赞 995


今天带来的内容只用两个字形容-干货!!首先我们科普下图像识别的常识,图片在电脑看来,其实就是一个矩阵,每个矩阵中的一个值都对应图片的一个像素点。(下图摘自《机器学习实践应用》)

https://img1.mukewang.com/5ad88b8b0001cc9a06020210.jpg

图片中其实是有很多的边以及拐角的,今天要介绍的就是如何通过算法找到图片拐角。  



原理

其实找到拐角,很简单,就是在图片矩阵中,通过一个移动的窗口去遍历矩阵中的数值,一旦返现有像素变化明显的地方,那就可能是一个拐点。这个过程就有点像“拿澡巾闭着眼睛从上向下搓澡,当你搓到一个硬硬的东西的时候,你会感觉这个部位跟其它的地方不同,没错,这里就是你的膝盖。” 


还是正经一点,看一下数学公式,(x,y)可以理解成是一张图片的横纵坐标,就是人的身体。(u,v)就是窗口函数,就是移动的澡巾。找图片的拐点就跟搓澡去找身体坚硬的地方一样,需要不断游动(u,v)的值,当这个值剧烈变化了,就说明出现了拐点。




最终通过数学方法,可以简化上边的函数式,过程很复杂,大家会意下就好,最终的结果:


R是这样判断的,R=MIN(x',y'),x'表示图片横向的变化趋势,y‘表示图片纵向的变化趋势,这个可以用一张图解释下,

(1)下图左数第一张是y’向变化很小,而x‘向变化大,可以设定为x'>0,y'<0,于是R<0。

(2)中间的一张两个方向都不变,R=0

(3)最右边一张两个方向变化都很大,x'>0,y'>0,R>0

https://img1.mukewang.com/5ad88bd50001db3303920119.jpg

于是,最右边的图是拐角,最左边的是边,中间的什么都不是。


代码

下面就用一段OPENCV的代码实现一下拐点检测,可以通过红点把拐角的地方标出来,给大家一个直观印象。

  1. import numpy as np    

  2.   

  3. import cv2    

  4.   

  5. from matplotlib import pyplot as plt    

  6.   

  7. img = cv2.imread('sample.jpg')    

  8.   

  9. gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    

  10.   

  11. corners = cv2.goodFeaturesToTrack(gray,25,0.01,10)    

  12.   

  13. corners = np.int0(corners)    

  14.   

  15. for i in corners:    

  16.   

  17.     x,y = i.ravel()    

  18.   

  19.     cv2.circle(img,(x,y),3,255,-1)    

  20.   

  21. plt.imshow(img),plt.show()  

再跑一个case给大家看看,身边没有拐角特别明显的东西,随手弄了张感觉比较明显的拐角图,恩!

原图:



运行结果:



今天代码写的我快缺氧了,欢迎猛烈转载,良心制作,谢谢!

参考:

https://blog.csdn.net/woxincd/article/details/60754658

https://blog.csdn.net/qq_41352018/article/details/79944481

原文出处

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP