AI: 图像识别基础(Image Processing Basics)二
四,边缘检测(Edge Detection)
边缘是什么?
边缘勾画出目标物体;边缘蕴含了丰富的信息:方向、形状等;边缘是图像局部特征不连续(灰度突变、颜色突变、纹理结构突变等)的反映;标志着一个区域的终结和另一个区域的开始。对于计算机,边缘是指周围像素灰度有变化的那些像素的集合。主要表现为图像局部特征的不连续行;即信号发生奇异变化的地方。
例如:
Edge Detection?
人眼对物体的区别依赖于图像的边缘;人的视觉细胞对物体的边缘特别敏感。我们先看到物体的轮廓,然后才判断这到底是什么东西。边缘检测技术能够将图像中最有意义的部分即边缘信息。提取出来,为进一步的图像分析、处理、识别奠定基础。
边缘处理前后对比。
在Azure AI 写Python 比较方便,这里继续介绍使用Python 做Edge Detection的方法
在Azure平台里使用的是,基于Sobel的边沿检测。
参考代码
import numpy import argparse import cv2 image = cv2.imread('1.jpg') cv2.imshow("Original", image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow("Gray", gray) sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0) sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1) sobelx = numpy.uint8(numpy.absolute(sobelx)) sobely = numpy.uint8(numpy.absolute(sobely)) sobelcombine = cv2.bitwise_or(sobelx,sobely) #display two images in a figure cv2.imshow("Edge detection by Sobel", numpy.hstack([gray,sobelx,sobely, sobelcombine])) cv2.imwrite("1_edge_by_sobel.jpg", numpy.hstack([gray,sobelx,sobely, sobelcombine])) if(cv2.waitKey(0)==27): cv2.destroyAllWindows()
基于Laplacian的边沿检测
import numpy import argparse import cv2 image = cv2.imread('1.jpg') cv2.imshow("Original", image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow("Gray", gray) #if don't use a floating point data type when computing #the gradient magnitude image, you will miss edges lap = cv2.Laplacian(gray, cv2.CV_64F) lap = numpy.uint8(numpy.absolute(lap)) #display two images in a figure cv2.imshow("Edge detection by Laplacaian", numpy.hstack([lap, gray])) cv2.imwrite("1_edge_by_laplacian.jpg", numpy.hstack([gray, lap])) if(cv2.waitKey(0)==27): cv2.destroyAllWindows()
基于Canny的