شناسایی سلول های مخمر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

شناسایی سلول های مخمر

+2 امتیاز

سلام و تشکر از سایت خوبتون
من پروژه پایانیم در زمینه پردازش تصویر در زمینه زیست شناسیه و قصد دارم در فاز اول کار نواحی سلول ها مخمر را تشخیص بدم من تازه شروع کردم البته پایگاه داده ای را هم تهیه کردم که تصویری را که در زیر قرار دادم قصد دارم نواحی سلول های مخمر را توش پیدا کنم.
enter image description here

سوال شده فروردین 15, 1393  بوسیله ی علی ثابت (امتیاز 15)   1 1 1

1 پاسخ

+4 امتیاز
 
بهترین پاسخ

در ابتدا ار تصویر ماسک تهیه کنید بهتر تصویر را به فضای رنگی HSV برده و از کانال saturation برای تهیه ماسک استفاده کنید.سپس با استفاده از تابع findContour مجموعه کانتور ها را از ماسک بدست آورده و با استفاده از تابع drawContours کانتور ها را نمایش دهید.

تصویر ماسک :

enter image description here

تصویر کانتور های بدست آمده :

enter image description here

int main()
{
    Mat img = imread("d:\\1.jpg",1);
    Mat hsv_img;
    cvtColor(img,hsv_img,CV_BGR2HSV_FULL);
    vector<Mat> imgs;
    split(hsv_img,imgs);
    blur(imgs[1],imgs[1],Size(3,3));
    threshold(imgs[1],imgs[1],65,255,CV_THRESH_BINARY);

    imshow("mask",imgs[1]);
    vector<vector<Point>> contours;
    findContours(imgs[1],contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
    drawContours(img,contours,-1,CV_RGB(255,0,0),1);
    imshow("view",img);
    waitKey(0);
}
پاسخ داده شده فروردین 16, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد فروردین 16, 1393 بوسیله ی علی ثابت
ها؟!! ایییی که گفتیییی یعننننییییییی چی؟؟!!
لطفا کتاب - مقاله - سایت - .... که درباره این کارهایی که گفتین توضیح کاملی بده معرفی کنین
کتاب که گذاشتیم توسایت
http://www.7khatcode.com/index.php?qa=1158&qa_1=%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1&show=1158#q1158

سایت هم همین جا مطرح کنید اگر بدونم پاسخ میدم سایت های دیگری هم هست که می تونید سرچ کنید.
دقیقاً کدام قسمت را متوجه نشدید بفرمائید توضیح بدم.
من هیچی از پردازش تصویر نمیدونم و این کاری که شما با این عکس کردین خیلی برام جالب بود و میخوام شروع کنم به یاد گرفتنش.
لطفا بگین از کجا باید شروع کنم و چه پیش نیازهای داره.
و اگه میشه این قسمت از جملتون رو توضیح بدین:
" بهتر تصویر را به فضای رنگی HSV برده و از کانال saturation برای تهیه ماسک استفاده کنید"
شروع کنید به مطالعه کتاب های پردازش تصویری که قرار داده شده.
در مورد این روش خیلی دم دستی کانتورها  پیدا شده . میشه از روش های بهتری هم استفاده کرد چون تصویر اصلی فضای رنگیش RGB بود تبدیلش کرده به HSV تا از طریق کانال اشباع بتونه راحت تر عملیات سگمنت را انجام بده.
فضای رنگی RGB به این شکله که رنگ رو به 3 بخش قرمز آبی و سبز تقسیم می کنه
فضای رنگی Hsv رنگ رو به 3 بخشه  hue , شدت نور و مقدار روشنایی تقسیم میشه
که تبدیل این 2 تا به هم با استفاده از تابع cvtColor انجام شده
بعد بوسیله threshhold قسمت مربوط به شدت نور رو عوض کردیم که باعث شد عکس اول درست بشه .
بقیه کد هم کارش اینه دور اون دایره های سفید خط می کشه :)
بله .همانطوری که دوستان توضیح دادن تصویر اولیه RGB است این تصاویر به صورت interlaced یعنی در هم آمیخته هستش یعنی داده های تصویر به صورت BGRBGR... ذخیره شده.در فضای RGB قابلیت جدا سازی رنگ ها از یکدیگر کار دشواری هستش یعنی باید از تعداد شرط زیادی استفاده کنید ولی در فضای رنگی HSV به این صورت نیست به راحتی می تونید هر بازه رنگ را جدا کنید و یا اینکه با توجه به میزان اشباع شدن نواحی آنها از هم متمایز کنید که من به خاطر اشباع رنگ در لکه های سیاه مخمر سعی کردم کانال اشباع را برای اینکار استفاده کنم . تابع آستانه هم در حالت عادیش مثل یک شرط ساده می مونه مقادیری که بزرگتر از 65 هستند تبدیل بشن به سفید(255) و در غیراینصورت تبدیل بشن سیاه(0) این تصویری که از رنگ سفید و سیاه تشکیل شده بهش میگن ماسک.که سفید نمایانگر نواحی هدف ما هستش.
کانتور هم یعنی بدست رسم حاشیه نواحی هستش که باید تصویر ماسک(باینری) داشته باشیم تا بتونیم کانتور را محاسبه کنیم.
...