Contour Properties

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Sep 05, 2020

در اینجا برخی از خصوصیات اشیا مانند جامدی، قطر برابر ، تصویر ماسک ، شدت متوسط و غیره  که معمولاً مورد استفاده قرار می گیرند را یاد می گیریم

1. Aspect Ratio

این نسبت عرض به ارتفاع محدود کننده شی است.

x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h

2. Extent

Extent نسبت منطقه کانتور به مساحت مستطیل محدود کننده است.

area = cv.contourArea(cnt)
x,y,w,h = cv.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area

3. Solidity

جامدیت نسبت سطح کانتور به سطح بدنه محدب آن است.

area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area

4. Equivalent Diameter

قطر معادل قطر دایره ای است که مساحت آن همان اندازه کانتور است.

area = cv2.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)

5. Orientation

جهت گیری زاویه ای است که در آن جسم هدایت می شود. روش زیر همچنین به محورهای اصلی و محورهای جزئی می پردازد.

(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)

6. Mask and Pixel Points

در بعضی موارد ، ممکن است به تمام نقاطی که آن شی را تشکیل می دهد نیاز داشته باشیم. می توان به صورت زیر انجام داد:

mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)

در اینجا ، دو روش ، یکی با استفاده از توابع Numpy ، دیگری با استفاده از تابع OpenCV (آخرین خط نظر داده شده) برای انجام همان کار ارائه شده است. نتایج نیز یکسان است اما با اندکی تفاوت. Numpy مختصات را در قالب  **(row, column)** می دهد ، در حالی که OpenCV مختصات را در قالب **(x,y)** می دهد. بنابراین اساساً پاسخ ها عوض می شوند.

7. Maximum Value, Minimum Value and their locations

با استفاده از تصویر ماسک می توانیم این پارامترها را پیدا کنیم.

min_val, max_val, min_loc, max_loc = cv.minMaxLoc(imgray,mask = mask)

8. Mean Color or Mean Intensity

در اینجا ، می توانیم رنگ متوسط یک شی را پیدا کنیم. یا می تواند شدت متوسط جسم در حالت خاکستری باشد. ما مجدداً از همان ماسک برای انجام آن استفاده می کنیم.

mean_val = cv2.mean(im,mask = mask)

9. Extreme Points

Extreme Points به معنای بالاترین ، پایین ترین ، سمت راست ترین و چپ ترین نقاط جسم است.

leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])

به عنوان مثال ، اگر آن را روی نقشه هند اعمال کنم ، نتیجه زیر را می گیرم:

 

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
0دیدگاه