当前位置:网站首页>[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 latest version of codesonar has improved functional security and supports Misra, c++ parsing and visualization
- 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!
- Intelligent transportation is full of vitality. What will happen in the future? [easy to understand]
- Jetty:配置连接器[通俗易懂]
- Codeforces round 296 (Div. 2) A. playing with paper[easy to understand]
- Mysql子查询关键字的使用方式(exists)
- 单词反转实现「建议收藏」
- Implementation of mahout Pearson correlation
- 201215-03-19 - cocos2dx memory management - specific explanation "recommended collection"
- Implement secondary index with Gaussian redis
猜你喜欢
Intelligent software analysis platform embold
MySQL约束之默认约束default与零填充约束zerofill
H3C s7000/s7500e/10500 series post stack BFD detection configuration method
Codesonar enhances software reliability through innovative static analysis
CodeSonar如何帮助无人机查找软件缺陷?
Implement secondary index with Gaussian redis
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
AADL inspector fault tree safety analysis module
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全
Ubuntu安装mysql8遇到的问题以及详细安装过程
随机推荐
Cocos2d-x 游戏存档[通俗易懂]
Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]
I have to use my ID card to open an account. Is the bank card safe? I don't understand it
华泰证券可以做到万一佣金吗,万一开户安全嘛
[paper reading] maps: Multi-Agent Reinforcement Learning Based Portfolio Management System
MySQL storage expression error
UVA 11080 – Place the Guards(二分图判定)
Intelligent software analysis platform embold
npm uninstall和rm直接删除的区别
权限不足
HDU4876ZCC loves cards(多校题)
Implementation of mahout Pearson correlation
[UVALive 6663 Count the Regions] (dfs + 离散化)[通俗易懂]
写一下跳表
How to choose fund products? What fund is suitable to buy in July 2022?
Write a jump table
死锁的产生条件和预防处理[通俗易懂]
Codeforces Round #275 (Div. 2) C – Diverse Permutation (构造)[通俗易懂]
【矩阵乘】【NOI 2012】【cogs963】随机数生成器
国家正规的股票交易app有哪些?使用安不安全