شناسایی اجسام با استفاده از هیستوگرام آنها

به نام خداو با سلام ، در این برنامه با استفاده از تابع cv2.calcBackProject می خواهیم قسمتی از شی مورد نظر که درون تصویر وجود دارد را به این تابع بدهیم و تمام آن شی را برای ما استخراج کند. دقیقا مانند تابع cv2.inRange عمل می کند ولی با این تفاوت که برحسب هیستوگرام عمل می کند و نه محدوده رنگی. خب شروع کنیم.

  قبل از هر کاری پیکج های مورد نظر یعنی OpenCV و Numpy را به ترتیب برای محاسبه هیستوگرام و محاسبات عددی فرا می خوانیم. سپس تصویر اصلی که شی مورد نظر در ن قرار دارد را بارگذاری کرده و پس از تغییر اندازه آن را از فضای رنگی BGR به HSV منتقل می کنیم. علت این کار جستجوی راحت تر درون فضای HSV است. در اینجا تصویر مورد نظر ما یک توت فرنگی است. در زیر تصویر اصلی و تغییر آن به فضای HSV را مشاهده می کنید.

   اکنون نمونه ای از توت فرنگی را درون متغیر roi ذخیره می کنیم و فضای رنگی آن را از BGR به HSV تغییر می دهیم. پس از آن هیستوگرام دوبعدی ان را توسط تابع cv2.calcHist محاسبه می کنیم. اولین ورودی این تابع، تصویر نمونه در غالب HSV، دومین روردی تعداد کانال ها که در اینجا دو کانال انتخاب شده است. سومین ورودی ماسک است که مقدار آن را None می دهیم. ورودی چهارم تعداد BINS های هیستوگرام و آخرین ورودی محدوده کانال هاست. پس از محاسبه هیستوگرام لازم است ان را نرمالیزه کنیم تا هیستوگرام در محدود درست قرار بگیرد. شکل زیر نمونه ای از توت فرنگی است.

   در این مرحله با استفاده از تابع cv2.calcBackProject و با استفاده از تصویر اصلی و هیستوگرام نمونه توت فرنگی، ماسکی می سازیم که فقط توت فرنگی در آن وجود دارد. ورودی اول این تابع تصویر اصلی، ورودی دوم هیستوگرام نمونه، سومین ورودی محدوده کانال های هیستوگرام و آخرین پارامتر ورودی، مقیاس تصویر خروجی نسبت به تصویر ورودی است که در اینجا تصویر خروجی را هم اندازه تصویر ورودی در نظر گرفته ایم. شکل زیر ماسک ساخته شده توس تابع Cv2.calcBackProject را نمایش می دهد.

   در آخر یک فیلتر به منظور بهتر شدن خروجی به آن اعمال کرده و توسط دستورا منطقی Cv2.bitwise_and توت فرنگی را با استفاده از ماسک از درون تصویر اصلی استخراج و نمایش می دهیم. شکل زیر نتیجه نهایی را نمایش می دهد.


   از لینک زیر می توانید کد و تصاویر مربوط به این برنامه را دانلود نمایید.

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

0 نظرات
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x