±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËSobelËã×Ó¡¢CannyËã×Ó¡¢LaplacianËã×ÓµÈÄÚÈÝ£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚ csdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼£¬ÍƼö¡£ |
|
±ßÔµ¼ì²â£¨±ßÔµÌáÈ¡£©ÊÇͼÏñÂ˲¨µÄÒ»ÖÖ£¬×î³£ÓõÄÖ÷ÒªÓÐÈýÖÖ£¬SobelËã×Ó£¬LaplacianËã×Ó£¬CannyËã×Ó¡£
1¡¢SobelËã×Ó
SobelËã×Ó¼ì²â·½·¨¶Ô»Ò¶È½¥±äºÍÔëÉù½Ï¶àµÄͼÏñ´¦ÀíЧ¹û½ÏºÃ£¬sobelËã×Ó¶Ô±ßÔµ¶¨Î»²»ÊǺÜ׼ȷ£¬Í¼ÏñµÄ±ßÔµ²»Ö¹Ò»¸öÏñËØ£»µ±¶Ô¾«¶ÈÒªÇó²»ÊǺܸßʱ£¬ÊÇÒ»ÖÖ½ÏΪ³£ÓõıßÔµ¼ì²â·½·¨¡£ÊÇ´øÓз½ÏòµÄ¡£





ÔÚopencv-pythonÖУ¬SobelËã×ÓµÄÖ÷º¯Êý´úÂëΪ£º
dst = cv2.Sobel(src,
ddepth, dx, dy [, dst[, ksize[, scale[, delta[,
borderType]]]]]) |
ǰËĸöÊDZØÐëµÄ²ÎÊý£º
µÚÒ»¸ö²ÎÊýÊÇÐèÒª´¦ÀíµÄͼÏñ£»
µÚ¶þ¸ö²ÎÊýÊÇͼÏñµÄÉî¶È£¬-1±íʾ²ÉÓõÄÊÇÓëÔͼÏñÏàͬµÄÉî¶È¡£Ä¿±êͼÏñµÄÉî¶È±ØÐë´óÓÚµÈÓÚÔͼÏñµÄÉî¶È£»
dxºÍdy±íʾµÄÊÇÇ󵼵Ľ×Êý£¬0±íʾÕâ¸ö·½ÏòÉÏûÓÐÇóµ¼£¬Ò»°ãΪ0¡¢1¡¢2¡£
ºó±ß¶¼ÊÇ¿ÉÑ¡µÄ²ÎÊý£º
dstÊÇÊä³öͼÏñ£»
ksizeÊÇSobelËã×ӵĴóС£¬±ØÐëΪ1¡¢3¡¢5¡¢7¡£
scaleÊÇËõ·Åµ¼ÊýµÄ±ÈÀý³£Êý£¬Ä¬ÈÏÇé¿öÏÂûÓÐÉìËõϵÊý£»
deltaÊÇÒ»¸ö¿ÉÑ¡µÄÔöÁ¿£¬½«»á¼Óµ½×îÖÕµÄdstÖУ¬Í¬Ñù£¬Ä¬ÈÏÇé¿öÏÂûÓжîÍâµÄÖµ¼Óµ½dstÖУ»
borderTypeÊÇÅжÏͼÏñ±ß½çµÄģʽ¡£Õâ¸ö²ÎÊýĬÈÏֵΪcv2.BORDER_DEFAULT¡£
ÕûÌå´úÂëÈçÏ£º
#coding=utf-8
import cv2
import numpy as np
img = cv2.imread("D:/lion.jpg", 0)
x = cv2.Sobel(img,cv2.CV_16S,1,0)
y = cv2.Sobel(img,cv2.CV_16S,0,1)
absX = cv2.convertScaleAbs(x) # ת»Øuint8
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX,0.5,absY,0.5,0)
cv2.imshow("absX", absX)
cv2.imshow("absY", absY)
cv2.imshow("Result", dst)
cv2.waitKey(0)
cv2.destroyAllWindows() |
ÔÚSobelº¯ÊýµÄµÚ¶þ¸ö²ÎÊýÕâÀïʹÓÃÁËcv2.CV_16S¡£ÒòΪOpenCVÎĵµÖжÔSobelËã×ӵĽéÉÜÖÐÓÐÕâôһ¾ä£º¡°in
the case of 8-bit input images it will result in truncated
derivatives¡±¡£¼´Sobelº¯ÊýÇóÍêµ¼Êýºó»áÓиºÖµ£¬»¹Óлá´óÓÚ255µÄÖµ¡£¶øÔͼÏñÊÇuint8£¬¼´8λÎÞ·ûºÅÊý£¬ËùÒÔSobel½¨Á¢µÄͼÏñλÊý²»¹»£¬»áÓнضϡ£Òò´ËҪʹÓÃ16λÓзûºÅµÄÊý¾ÝÀàÐÍ£¬¼´cv2.CV_16S¡£
ÔÚ¾¹ý´¦Àíºó£¬±ðÍüÁËÓÃconvertScaleAbs()º¯Êý½«Æäת»ØÔÀ´µÄuint8ÐÎʽ¡£·ñÔò½«ÎÞ·¨ÏÔʾͼÏñ£¬¶øÖ»ÊÇÒ»¸±»ÒÉ«µÄ´°¿Ú¡£convertScaleAbs()µÄÔÐÍΪ£º
dst = cv2.convertScaleAbs(src
[, dst[, alpha[, beta]]]) |
ÆäÖпÉÑ¡²ÎÊýalphaÊÇÉìËõϵÊý£¬betaÊǼӵ½½á¹ûÉϵÄÒ»¸öÖµ¡£½á¹û·µ»Øuint8ÀàÐ͵ÄͼƬ¡£
ÓÉÓÚSobelËã×ÓÊÇÔÚÁ½¸ö·½Ïò¼ÆËãµÄ£¬×îºó»¹ÐèÒªÓÃcv2.addWeighted(...)º¯Êý½«Æä×éºÏÆðÀ´¡£Æäº¯ÊýÔÐÍΪ£º
dst = cv2.addWeighted (src1,
alpha, src2, beta, gamma[, dst[, dtype]]) |
ÆäÖÐalphaÊǵÚÒ»·ùͼƬÖÐÔªËØµÄÈ¨ÖØ£¬betaÊǵڶþ¸öµÄÈ¨ÖØ£¬gammaÊǼӵ½×îºó½á¹ûÉϵÄÒ»¸öÖµ¡£
2¡¢CannyËã×Ó
Canny·½·¨²»ÈÝÒ×ÊÜÔëÉù¸ÉÈÅ£¬Äܹ»¼ì²âµ½ÕæÕýµÄÈõ±ßÔµ¡£ÓŵãÔÚÓÚ£¬Ê¹ÓÃÁ½ÖÖ²»Í¬µÄãÐÖµ·Ö±ð¼ì²âÇ¿±ßÔµºÍÈõ±ßÔµ£¬²¢ÇÒµ±Èõ±ßÔµºÍÇ¿±ßÔµÏàÁ¬Ê±£¬²Å½«Èõ±ßÔµ°üº¬ÔÚÊä³öͼÏñÖС£
Canny±ßÔµ¼ì²âËã·¨¿ÉÒÔ·ÖΪÒÔÏÂ5¸ö²½Ö裺
1) ʹÓøß˹Â˲¨Æ÷£¬ÒÔÆ½»¬Í¼Ïñ£¬Â˳ýÔëÉù¡£
2) ¼ÆËãͼÏñÖÐÿ¸öÏñËØµãµÄÌݶÈÇ¿¶ÈºÍ·½Ïò¡£
3) Ó¦Ó÷Ǽ«´óÖµ£¨Non-Maximum Suppression£©ÒÖÖÆ£¬ÒÔÏû³ý±ßÔµ¼ì²â´øÀ´µÄÔÓÉ¢ÏìÓ¦¡£
4) Ó¦ÓÃË«ãÐÖµ£¨Double-Threshold£©¼ì²âÀ´È·¶¨ÕæÊµµÄºÍDZÔڵıßÔµ¡£
5) ͨ¹ýÒÖÖÆ¹ÂÁ¢µÄÈõ±ßÔµ×îÖÕÍê³É±ßÔµ¼ì²â¡£
ÔÚÊ©¼Ó·Ç¼«´óÖµÒÖÖÆÖ®ºó£¬Ê£ÓàµÄÏñËØ¿ÉÒÔ¸ü׼ȷµØ±íʾͼÏñÖеÄʵ¼Ê±ßÔµ¡£È»¶ø£¬ÈÔÈ»´æÔÚÓÉÓÚÔëÉùºÍÑÕÉ«±ä»¯ÒýÆðµÄһЩ±ßÔµÏñËØ¡£ÎªÁ˽â¾öÕâЩÔÓÉ¢ÏìÓ¦£¬±ØÐëÓÃÈõÌݶÈÖµ¹ýÂ˱ßÔµÏñËØ£¬²¢±£Áô¾ßÓиßÌݶÈÖµµÄ±ßÔµÏñËØ£¬¿ÉÒÔͨ¹ýÑ¡Ôñ¸ßµÍãÐÖµÀ´ÊµÏÖ¡£Èç¹û±ßÔµÏñËØµÄÌݶÈÖµ¸ßÓÚ¸ßãÐÖµ£¬Ôò½«Æä±ê¼ÇΪǿ±ßÔµÏñËØ£»Èç¹û±ßÔµÏñËØµÄÌݶÈֵСÓÚ¸ßãÐÖµ²¢ÇÒ´óÓÚµÍãÐÖµ£¬Ôò½«Æä±ê¼ÇΪÈõ±ßÔµÏñËØ£»Èç¹û±ßÔµÏñËØµÄÌݶÈֵСÓÚµÍãÐÖµ£¬Ôò»á±»ÒÖÖÆ¡£ãÐÖµµÄÑ¡ÔñÈ¡¾öÓÚ¸ø¶¨ÊäÈëͼÏñµÄÄÚÈÝ¡£
±»»®·ÖΪǿ±ßÔµµÄÏñËØµãÒѾ±»È·¶¨Îª±ßÔµ£¬ÒòΪËüÃÇÊÇ´ÓͼÏñÖеÄÕæÊµ±ßÔµÖÐÌáÈ¡³öÀ´µÄ¡£È»¶ø£¬¶ÔÓÚÈõ±ßÔµÏñËØ£¬½«»áÓÐһЩÕùÂÛ£¬ÒòΪÕâЩÏñËØ¿ÉÒÔ´ÓÕæÊµ±ßÔµÌáȡҲ¿ÉÒÔÊÇÒòÔëÉù»òÑÕÉ«±ä»¯ÒýÆðµÄ¡£ÎªÁË»ñµÃ׼ȷµÄ½á¹û£¬Ó¦¸ÃÒÖÖÆÓɺóÕßÒýÆðµÄÈõ±ßÔµ¡£Í¨³££¬ÓÉÕæÊµ±ßÔµÒýÆðµÄÈõ±ßÔµÏñËØ½«Á¬½Óµ½Ç¿±ßÔµÏñËØ£¬¶øÔëÉùÏìӦδÁ¬½Ó¡£ÎªÁ˸ú×Ù±ßÔµÁ¬½Ó£¬Í¨¹ý²é¿´Èõ±ßÔµÏñËØ¼°Æä8¸öÁÚÓòÏñËØ£¬Ö»ÒªÆäÖÐÒ»¸öΪǿ±ßÔµÏñËØ£¬Ôò¸ÃÈõ±ßÔµµã¾Í¿ÉÒÔ±£ÁôÎªÕæÊµµÄ±ßÔµ¡£
CannyµÄÊäÈëÊǾ¹ý»Ò¶È»¯µÄµ¥Í¨µÀͼ¡£
ÔÚopencv-pythonÖУ¬CannyËã×ÓµÄÖ÷º¯Êý´úÂëΪ£º
edge = cv2.Canny
(image, threshold1, threshold2[, edges[, apertureSize[,
L2gradient ]]]) |
±ØÒª²ÎÊý£º
µÚÒ»¸ö²ÎÊýÊÇÐèÒª´¦ÀíµÄÔͼÏñ£¬¸ÃͼÏñ±ØÐëΪµ¥Í¨µÀµÄ»Ò¶Èͼ£»
µÚ¶þ¸ö²ÎÊýÊÇãÐÖµ1£»
µÚÈý¸ö²ÎÊýÊÇãÐÖµ2¡£
ÆäÖнϴóµÄãÐÖµ2ÓÃÓÚ¼ì²âͼÏñÖÐÃ÷ÏԵıßÔµ£¬µ«Ò»°ãÇé¿öϼì²âµÄЧ¹û²»»áÄÇôÍêÃÀ£¬±ßÔµ¼ì²â³öÀ´ÊǶ϶ÏÐøÐøµÄ¡£ËùÒÔÕâʱºòÓýÏСµÄµÚÒ»¸öãÐÖµÓÃÓÚ½«ÕâЩ¼ä¶ÏµÄ±ßÔµÁ¬½ÓÆðÀ´¡£
¿ÉÑ¡²ÎÊýÖÐapertureSize¾ÍÊÇSobelËã×ӵĴóС£¬Ä¬ÈÏΪ3¡£¶øL2gradient²ÎÊýÊÇÒ»¸ö²¼¶ûÖµ£¬Èç¹ûÎªÕæ£¬ÔòʹÓøü¾«È·µÄL2·¶Êý½øÐмÆË㣨¼´Á½¸ö·½ÏòµÄµ¹ÊýµÄƽ·½ºÍÔÙ¿ª·Å£©£¬·ñÔòʹÓÃL1·¶Êý£¨Ö±½Ó½«Á½¸ö·½Ïòµ¼ÊýµÄ¾ø¶ÔÖµÏà¼Ó£©¡£
º¯Êý·µ»ØÒ»¸±¶þֵͼ£¬ÆäÖаüº¬¼ì²â³öµÄ±ßÔµ¡£
ÍêÕû´úÂëΪ£º
#coding=utf-8
import cv2
import numpy as np
img = cv2.imread("D:/lion.jpg", 0)
img = cv2.GaussianBlur(img,(3,3),0) #Óøß˹ƽ»¬´¦ÀíÔͼÏñ½µÔë¡£
canny = cv2.Canny(img, 50, 150) #×î´ó×îСãÐÖµ
cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows() |
3¡¢LaplacianËã×Ó
LaplacianËã×ÓÊÇÒ»ÖÖ¶þ½×΢·ÖËã×Ó¡£¶ÔÔëÉù±È½ÏÃô¸Ð£¬ËùÒÔºÜÉÙÓøÃËã×Ó¼ì²â±ßÔµ£¬¶øÊÇÓÃÀ´ÅжϱßÔµÏñËØÊÓΪÓëͼÏñµÄÃ÷Çø»¹ÊǰµÇø¡£ÀÆÕÀ˹¸ß˹Ëã×ÓÊÇÒ»ÖÖ¶þ½×µ¼ÊýËã×Ó£¬½«ÔÚ±ßÔµ´¦²úÉúÒ»¸ö¶¸Ç͵ÄÁã½»²æ,
LaplacianËã×ÓÊǸ÷ÏòͬÐԵģ¬ÄܶÔÈκÎ×ßÏòµÄ½çÏߺÍÏßÌõ½øÐÐÈñ»¯£¬ÎÞ·½ÏòÐÔ¡£ÕâÊÇÀÆÕÀ˹Ëã×ÓÇø±ðÓÚÆäËûËã·¨µÄ×î´óÓŵ㡣

ÔÚopencv-pythonÖУ¬LaplacianËã×ÓµÄÖ÷º¯Êý´úÂëΪ;
²ÎÊýµÄº¬ÒåÀàËÆÓÚsobelËã×Ó£º
ǰÁ½¸öÊDZØÐëµÄ²ÎÊý£º
µÚÒ»¸ö²ÎÊýÊÇÐèÒª´¦ÀíµÄͼÏñ£»
µÚ¶þ¸ö²ÎÊýÊÇͼÏñµÄÉî¶È£¬-1±íʾ²ÉÓõÄÊÇÓëÔͼÏñÏàͬµÄÉî¶È¡£Ä¿±êͼÏñµÄÉî¶È±ØÐë´óÓÚµÈÓÚÔͼÏñµÄÉî¶È£»
ÆäºóÊÇ¿ÉÑ¡µÄ²ÎÊý£º
dst²»ÓýâÊÍÁË£»
ksizeÊÇËã×ӵĴóС£¬±ØÐëΪ1¡¢3¡¢5¡¢7¡£Ä¬ÈÏΪ1¡£
scaleÊÇËõ·Åµ¼ÊýµÄ±ÈÀý³£Êý£¬Ä¬ÈÏÇé¿öÏÂûÓÐÉìËõϵÊý£»
deltaÊÇÒ»¸ö¿ÉÑ¡µÄÔöÁ¿£¬½«»á¼Óµ½×îÖÕµÄdstÖУ¬Í¬Ñù£¬Ä¬ÈÏÇé¿öÏÂûÓжîÍâµÄÖµ¼Óµ½dstÖУ»
borderTypeÊÇÅжÏͼÏñ±ß½çµÄģʽ¡£Õâ¸ö²ÎÊýĬÈÏֵΪcv2.BORDER_DEFAULT¡£
ÍêÕû´úÂëΪ£º
#coding=utf-8
import cv2
import numpy as np
img = cv2.imread("D:/lion.jpg", 0)
gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize
= 3)
dst = cv2.convertScaleAbs(gray_lap)
cv2.imshow('laplacian',dst)
cv2.waitKey(0)
cv2.destroyAllWindows() |
Ò²¿ÉÒÔÏñcannyËã×ÓÖеĴúÂëÒ»Ñù£¬ÏȾ¹ýһЩÂ˲¨À´½µÔ룬ȻºóÔÙ×ö±ßÔµ¼ì²â¡£
|