当前位置:网站首页>[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
边栏推荐
- 开户还得用身份证银行卡安全吗,我是小白不懂
- I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
- How can big state-owned banks break the anti fraud dilemma?
- Codesonar enhances software reliability through innovative static analysis
- Small guide for rapid formation of manipulator (12): inverse kinematics analysis
- npm uninstall和rm直接删除的区别
- 使用高斯Redis实现二级索引
- sqlHelper的增删改查
- 现在网上开户安全么?想知道我现在在南宁,到哪里开户比较好?
- Default constraint and zero fill constraint of MySQL constraint
猜你喜欢
Usage of MySQL subquery keywords (exists)
SQL注入报错注入函数图文详解
目标:不排斥 yaml 语法。争取快速上手
使用高斯Redis实现二级索引
神兵利器——敏感文件发现工具
【OpenCV 例程200篇】223. 特征提取之多边形拟合(cv.approxPolyDP)
Cantata9.0 | new features
C language helps you understand pointers from multiple perspectives (1. Character pointers 2. Array pointers and pointer arrays, array parameter passing and pointer parameter passing 3. Function point
The latest version of codesonar has improved functional security and supports Misra, c++ parsing and visualization
软件缺陷静态分析 CodeSonar 5.2 新版发布
随机推荐
AADL inspector fault tree safety analysis module
Numerical method for solving optimal control problem (0) -- Definition
Guava multithreading, futurecallback thread calls are uneven
Implement secondary index with Gaussian redis
Object-C programming tips timer "suggestions collection"
目标:不排斥 yaml 语法。争取快速上手
MinGW MinGW-w64 TDM-GCC等工具链之间的差别与联系「建议收藏」
MySQL storage expression error
A brief understanding of the in arc__ bridge、__ bridge_ Retained and__ bridge_ transfer
恶魔奶爸 B2 突破语法,完成正统口语练习
恶魔奶爸 B3 少量泛读,完成两万词汇量+
Intelligent transportation is full of vitality. What will happen in the future? [easy to understand]
margin 等高布局
Mysql子查询关键字的使用方式(exists)
2022年在启牛开中银股票的账户安全吗?
Flask1.1.4 werkzeug1.0.1 source code analysis: Routing
Do you have to make money in the account to open an account? Is the fund safe?
The latest version of codesonar has improved functional security and supports Misra, c++ parsing and visualization
Measure the height of the building
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全