当前位置:网站首页>[200 opencv routines] 223 Polygon fitting for feature extraction (cv.approxpolydp)
[200 opencv routines] 223 Polygon fitting for feature extraction (cv.approxpolydp)
2022-07-07 21:18:00 【Xiaobai youcans】
『youcans Of OpenCV routine 200 piece - General catalogue 』
【youcans Of OpenCV routine 200 piece 】223. Polygon fitting for feature extraction
Basic concept of target characteristics
Multiple regions are obtained by image segmentation , Get the pixel set in the region or the pixel set at the boundary of the region . We call people or things we are interested in as goals , The area where the target is located is the target area .
The feature is usually aimed at a certain target in the image . After image segmentation , The target area should also be properly represented and described , For the next step .
“ Express ” It is to express the goal directly and concretely , To save storage space 、 Convenient feature calculation . Representation of goals , Chain code 、 Polygonal approximation (MPP)、 Slope marking diagram 、 Boundary segmentation 、 Area skeleton .
“ describe ” It is an abstract expression of the goal , On the basis of distinguishing different goals , Try to measure the target 、 translation 、 Rotation change insensitive .
Boundary feature descriptor
The boundary descriptor of the target (Boundary descriptors), Also called boundary descriptor .
The outline is the description of the target boundary , The contour attribute is the basic boundary descriptor .
for example :
- The length of the boundary , The number of pixels of the contour is an approximate estimate of the perimeter of the boundary ;
- The diameter of the boundary , The length of the long axis of the boundary , Equal to the length of the long side of the rectangular bounding box with the smallest contour ;
- Eccentricity of boundary , The ratio of the major axis to the minor axis of the boundary , Equal to the length width ratio of the smallest rectangular bounding box of the contour ;
- The curvature of the boundary , Slope difference of adjacent boundary segments ;
- Chain code , The boundary is represented by a straight line segment with a specified length and direction ;
- Fourier descriptor , Fourier coefficients obtained by discrete Fourier transform of two-dimensional boundary points , For rotation 、 translation 、 Scale and start point are insensitive ;
- Statistical moments , Treat the boundary as a histogram function , Describe the boundary features with image moments , With translation 、 Grayscale 、 scale 、 Rotation invariance .
### routine 12.12: Polygon fitting of contour
OpenCV The function in cv.approxPolyDP() It can be used for polygon fitting of image contour points .
Function description :
cv.approxPolyDP(curve, epsilon, closed[, approxCurve=None]) → approxCurve
function cv.approxPolyDP Use Douglas-Peucker The algorithm finds a polyline with fewer vertices / polygon , Approximate the input curve or polygon with the specified accuracy .( Reference resources : Fit a straight line , Fit ellipse )
Parameter description :
- curve: Input point set , Set of two-dimensional point vectors
- approxCurve: Output point set , Represents a fitting curve or polygon , Data and input parameters curve Agreement
- epsilon: Specified approximate accuracy , The maximum distance between the original curve and the approximate curve
- close: Closing sign ,True Represents a closed polygon ,False Indicates that the polygon is not closed
matters needing attention :
Douglas-Peucker Algorithm :
(1) At the beginning of the curve A And the end B Make a straight line between AB, Is the chord of the curve ;
(2) Find the point on the curve with the largest distance from the straight line C, Calculate its relation with AB Distance of d;
(3) Comparison distance d And the set threshold threshold, If it is less than the set threshold, the straight line segment is used as the approximation of the curve , The curve processing is completed .
(4) If distance d Greater than the set threshold , with C Point will curve AB It's divided into two parts AC and BC, And carry out the above steps for these two paragraphs .
(5) When all curves are processed , Connect the broken line formed by all the dividing points in turn , As an approximation of the curve .
# 12.12 Polygon fitting of contour
img = cv2.imread("../images/Fig1105.tif", flags=1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Grayscale image
blur = cv2.boxFilter(gray, -1, (5, 5)) # Box filter ,9*9 Smooth nucleus
_, binary = cv2.threshold(blur, 205, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)
# Find the outline in the binary graph
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # OpenCV4~
print('len:', len(contours))
# Draw all contours ,contourIdx=-1 Draw all contours
imgCnts = np.zeros(gray.shape[:2], np.uint8) # The draw contour function will modify the original image
imgCnts = cv2.drawContours(imgCnts, contours, -1, (255, 255, 255), thickness=2) # Draw all contours
plt.figure(figsize=(9, 6))
plt.subplot(231), plt.axis('off'), plt.title("Origin")
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.subplot(232), plt.axis('off'), plt.title("Binary")
plt.imshow(binary, 'gray')
plt.subplot(233), plt.axis('off'), plt.title("Contour")
plt.imshow(imgCnts, 'gray')
cnts = sorted(contours, key=cv2.contourArea, reverse=True) # All profiles are sorted by area
cnt = cnts[0] # The first 0 A profile , The outline with the largest area ,(664, 1, 2)
print("shape of max contour:", cnt.shape[0])
eps = [50, 30, 10]
for i in range(len(eps)):
polyFit = cv2.approxPolyDP(cnt, eps[i], True)
print("eps={}, shape of fitting polygon:{}".format(eps[i], polyFit.shape[0]))
fitContour = np.zeros(gray.shape[:2], np.uint8) # Initialize the maximum contour image
cv2.polylines(fitContour, [cnt], True, 205, thickness=2) # Draw the maximum outline , Polygonal curve
cv2.polylines(fitContour, [polyFit], True, 255, 3)
plt.subplot(2,3,i+4), plt.axis('off'), plt.title("approxPoly(eps={})".format(eps[i]))
plt.imshow(fitContour, 'gray')
plt.tight_layout()
plt.show()
Running results :
shape of max contour: 547
eps=50, shape of fitting polygon:5
eps=30, shape of fitting polygon:8
eps=10, shape of fitting polygon:13
The results show that , use 13 A polygon with vertices can well approach the boundary of the contour , Describe the boundary features of the contour , Significantly reduce the amount of data .
【 At the end of this section 】
Copyright notice :
[email protected] Original works , Reprint must be marked with the original link :(https://blog.csdn.net/youcans/article/details/125598167)
Copyright 2022 youcans, XUPT
Crated:2022-6-30
197. The basic features of the contour
200. Basic properties of the contour
223. Polygon fitting for feature extraction
边栏推荐
- The difference between NPM uninstall and RM direct deletion
- 【C语言】指针进阶---指针你真的学懂了吗?
- Write a jump table
- Small guide for rapid formation of manipulator (12): inverse kinematics analysis
- 恶魔奶爸 C
- 国家正规的股票交易app有哪些?使用安不安全
- Cantata9.0 | 全 新 功 能
- Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]
- Unity3d 4.3.4f1 execution project
- Ubuntu安装mysql8遇到的问题以及详细安装过程
猜你喜欢
MySQL storage expression error
Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]
AADL inspector fault tree safety analysis module
Focusing on safety in 1995, Volvo will focus on safety in the field of intelligent driving and electrification in the future
如何满足医疗设备对安全性和保密性的双重需求?
Cantata9.0 | new features
Onespin | solve the problems of hardware Trojan horse and security trust in IC Design
Klocwork code static analysis tool
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全
Codesonar enhances software reliability through innovative static analysis
随机推荐
Guava multithreading, futurecallback thread calls are uneven
OpenGL super classic learning notes (1) the first triangle "suggestions collection"
sqlHelper的增删改查
现在网上开户安全么?想知道我现在在南宁,到哪里开户比较好?
201215-03-19—cocos2dx内存管理–具体解释「建议收藏」
Is it safe to open an account of BOC shares in kainiu in 2022?
gridView自己定义做时间排版「建议收藏」
Referrer和Referrer-Policy简介
Lex & yacc of Pisa proxy SQL parsing
margin 等高布局
Spark judges that DF is empty
AADL inspector fault tree safety analysis module
嵌入式系统真正安全了吗?[ OneSpin如何为开发团队全面解决IC完整性问题 ]
Deployment, recall and deletion solutions - stsadm and PowerShell "suggestions collection"
Mysql子查询关键字的使用方式(exists)
Codesonar enhances software reliability through innovative static analysis
寫一下跳錶
Make this crmeb single merchant wechat mall system popular, so easy to use!
Numerical method for solving optimal control problem (0) -- Definition
恶魔奶爸 指南帖——简易版