Ali Ismael نشر 4 نوفمبر 2021 أرسل تقرير نشر 4 نوفمبر 2021 أريد مثال يبين كيفية استخدام خوارزمية SIFT في OpenCV؟ 2 اقتباس
0 Ali Haidar Ahmad نشر 4 نوفمبر 2021 أرسل تقرير نشر 4 نوفمبر 2021 import cv2 as cv image = cv.imread("C:/temp/1.png") gray_image= cv.cvtColor(image,cv2.COLOR_BGR2GRAY) sift = cv.SIFT() kp = sift.detect(gray_image,None) image=cv.drawKeypoints(gray_image,kp) cv.imshow(image) cv.waitKey() cv.destroyAllWindows() والنتيجة: بدايةً علينا أن نقوم ببناء جسم SIFT، ثم نقوم بتمرير البيانات المختلفة إليه (اختياري). أولاً نقوم بقراءة الصورة وتحويلها للصيغة الرمادية: image = cv.imread("C:/temp/1.png") gray_image= cv.cvtColor(image,cv2.COLOR_BGR2GRAY) ثم نقوم بإنشاء جسم خوارزمية SIFT وذلك من خلال التابع cv2.SIFT: sift = cv.SIFT() ثم نستخدم التابع sift.detect لإيجاد النقاط الرئيسية في الصورة. يمكنك تمرير قناع إذا أردت البحث عنها فقط في جزء محدد. كل نقطة رئيسية لها تركيب خاص وهي تحوي على العديد من الخصائص مثل الإحداثيات x و y، وحجم الجوار ذو المعنى، والزاوية التي تحدد الاتجاه، والاستجابة التي تحدد قوة النقاط الرئيسية. kp = sift.detect(gray_image,None) أيضاً استخدمنا التابع: image=cv.drawKeypoints(gray_image,kp) الذي يقوم برسم دوائر صغيرة في مواقع النقاط الرئيسية. وإذا مررت cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS له، فسوف يرسم دائرة بحجم النقطة الأساسية وسيعرض أيضاً الاتجاه. أي: img=cv2.drawKeypoints(gray,kp,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) النتيجة ستكون: الآن لحساب الوصف يمكننا القيام بذلك بطريقتين: 1. في حالة أوجدنا النقاط الرئيسية (كما فعلنا) ،استخدم الدالة sift.compute التي تحسب الوصف من خلال النقاط الرئيسية. kp,des = sift.compute(gray_image,kp) 2. إذا لم تقوم بإيجاد النقاط الرئيسية، عندها يمكنك إيجاد النقاط الرئيسية+الوصف من خلال الدالة sift.detectAndCompute: sift = cv2.SIFT() kp, des = sift.detectAndCompute(gray_image,None) هنا kp تمثل مصفوفة بالنقاط الرئيسية، و des تمثل مصفوفة من الشكل (عدد النقاط * 28) . 1 اقتباس
0 Ahmed Sharshar نشر 10 نوفمبر 2021 أرسل تقرير نشر 10 نوفمبر 2021 دعنا نوضح ما فائدة تلك الخوارزمية أولا. نعلم أن أن معظم الخصائصلا تتغير حتى بعد التدوير , ولكن بالنسبة لتغيير الحجم سواء بالتكبير أو التصغير فقد لا يصح هذا، كمثال أن الزاوية لاتبقى نفسها بعد التغيير , لذلك نقول أن مكتشفات هاريس متأثرة بالحجم. ومن هنا نستخدم خوارزمية sift والتي تسمح لنا بعمل بجعل الصورة مناسبة للتكبير والتصغيير دون التأثير على خصائصها. أما كمثال على تطبيقها في opencv فهو كالتالي: في البداية علينا تحميل الصورة وبناء نموذج بسيط ل sift: #استدعاء المكتبات import cv2 import numpy as np from matplotlib import pyplot as plt %matplotlib inline #تحميل الصورة img = cv2.imread('wt.jpg') # قراءة الصورة بشكل صحيح img= cv2.cvtColor(img,cv2.COLOR_BGR2RGB) gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # بناء النموذج sift = cv2.SIFT() kp = sift.detect(gray,None) ثم بعد ذلك نظهر الخصائص التي اكتشفها النموذج بوضع داائرة صغيرة حولها: lt.figure(figsize=(8,16)) plt.imshow(res_img) plt.xticks([]) plt.yticks([]) plt.title('Ordinary Points') plt.show() res2_img=cv2.drawKeypoints( gray,kp,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) plt.figure(figsize=(8,16)) plt.imshow(res2_img) plt.xticks([]) plt.yticks([]) plt.title('More Clarity Points') هنا قمنا برسم دوائر صغيرة وكبيرة حول النقاط الرئيسية: ثم لحساب المواصفات يوجد عدة طرق لكن ابسطها مباشرة عن طريق ايجاد النقاط والموصفات بتابع واحد هكذا: sift = cv2.SIFT() kp, des = sift.detectAndCompute(gray,None) اقتباس
0 Fatima Alhassan نشر 27 نوفمبر 2022 أرسل تقرير نشر 27 نوفمبر 2022 بتاريخ On 10/11/2021 at 22:12 قال Ahmed Sharshar: دعنا نوضح ما فائدة تلك الخوارزمية أولا. نعلم أن أن معظم الخصائصلا تتغير حتى بعد التدوير , ولكن بالنسبة لتغيير الحجم سواء بالتكبير أو التصغير فقد لا يصح هذا، كمثال أن الزاوية لاتبقى نفسها بعد التغيير , لذلك نقول أن مكتشفات هاريس متأثرة بالحجم. ومن هنا نستخدم خوارزمية sift والتي تسمح لنا بعمل بجعل الصورة مناسبة للتكبير والتصغيير دون التأثير على خصائصها. أما كمثال على تطبيقها في opencv فهو كالتالي: في البداية علينا تحميل الصورة وبناء نموذج بسيط ل sift: #استدعاء المكتبات import cv2 import numpy as np from matplotlib import pyplot as plt %matplotlib inline #تحميل الصورة img = cv2.imread('wt.jpg') # قراءة الصورة بشكل صحيح img= cv2.cvtColor(img,cv2.COLOR_BGR2RGB) gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # بناء النموذج sift = cv2.SIFT() kp = sift.detect(gray,None) ثم بعد ذلك نظهر الخصائص التي اكتشفها النموذج بوضع داائرة صغيرة حولها: lt.figure(figsize=(8,16)) plt.imshow(res_img) plt.xticks([]) plt.yticks([]) plt.title('Ordinary Points') plt.show() res2_img=cv2.drawKeypoints( gray,kp,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) plt.figure(figsize=(8,16)) plt.imshow(res2_img) plt.xticks([]) plt.yticks([]) plt.title('More Clarity Points') هنا قمنا برسم دوائر صغيرة وكبيرة حول النقاط الرئيسية: ثم لحساب المواصفات يوجد عدة طرق لكن ابسطها مباشرة عن طريق ايجاد النقاط والموصفات بتابع واحد هكذا: sift = cv2.SIFT() kp, des = sift.detectAndCompute(gray,None) السلام عليكم ممكن سؤال كيف يمكن خزن الصوره بعد ماتم تحديد الميزات الرئيسيه اقتباس
السؤال
Ali Ismael
أريد مثال يبين كيفية استخدام خوارزمية SIFT في OpenCV؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.