#!/usr/bin/env python # coding: utf-8 # #
پیدا کردن گوشه‌ها با روش Shi-Tomasi
# #
در نوت‌بوک قبلی روش Harris برای پیدا کردن گوشه ها را مشاهده کردیم، بعد از معرفی این روش، چند سال بعد در سال 1994 میلادی دو محقق با نامهای Shi و Tomasi به کمی تغییرات در روش Harris در مقاله ای تحت عنوان Good Features to Track به دقت بهتر دست یافتند. #
# تابع امتیاز دهی در آشکارساز گوشه هریس توسط: #
# # $$R = \lambda_1 \lambda_2 - k(\lambda_1+\lambda_2)^2$$ # #
که این دو محقق با بازنگری در این تابع امتیاز دهی به جای فرمول بالا از فرول زیر استفاده کردند: #
# # $$R = \min(\lambda_1, \lambda_2)$$ # #
که مثل سابق، اگر مقدار این تابع بیشتر از حد آستانه باشد، گوشه محسوب می شود. #
# # #
# که طبق تصویر ناحیه‌ی سبز رنگ به معنای این است که هم # $\lambda_1$ # و هم # $\lambda_2$ # بالای حد آستانه هستند که به معنی وجود گوشه است! #
#
# در OpenCV این روش در تابع goodFeaturesToTrack پیاده سازی شده است.
# این تابع به عنوان پارامتر ورودی روش گوشه یابی را از شما دریافت کرده (Shi-Tomasi یا تشخیص گوشه هریس، اگر مشخص کنید) و سپس N گوشه قوی تر(بزرگترین اعداد متریک بالا) را پیدا می کند. # طبق معمول، تصویر باید یک تصویر سطح-خاکستری باشد. # سپس تعداد گوشه هایی را که می خواهید پیدا کنید مشخص می کنید. # سپس سطح کیفیت را مشخص می‌کنید که مقداری بین 0-1 است که نشان‌دهنده حداقل کیفیت گوشه‌ای است که زیر آن همه رد می‌شوند. # سپس حداقل فاصله اقلیدسی بین گوشه های شناسایی شده را ارائه می کنیم. #
#
# برای مثال در کد زیر تلاش میکنیم که 25 گوشه برتر را پیدا کنیم: #
# In[2]: import numpy as np import cv2 import matplotlib.pyplot as plt img = cv2.imread('images/blox.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) corners = cv2.goodFeaturesToTrack(gray,25,0.01,10) corners = np.int0(corners) for i in corners: x,y = i.ravel() cv2.circle(img,(x,y),3,255,-1) plt.imshow(img),plt.show(); # https://docs.opencv.org/4.x/d4/d8c/tutorial_py_shi_tomasi.html