ورود

View Full Version : تشخیص تصویر تاریک از تصویر روشن



almasm85
چهارشنبه 24 تیر 1394, 12:21 عصر
با سلام
میخوام کدی بنویسم که یک تصویر ورودی را به برنامه بدم و تشخیص بده که :
تصویر روشن است
تصویر تاریک است
تصویر نه تاریک و نه روشن

------------------
ایده ای که خودم دارم اینه که از هیستوگرامش استفاده کنم
اینکه تجمع در کدام قسمت است
اگر به سمت صفر هست >>>> تاریک
اگر به سمت 255 هست >>>> روشن
و اگر وسط این دو هست >>>> نه تاریک و نه روشن
-----------------------------
این ایده رو میخوام در متلب پیاده کنم .
به نظر شما چه طور میتونم ؟

rahnema1
چهارشنبه 24 تیر 1394, 18:50 عصر
سلام
مثلا بررسی کنید مجموع مقادیر هیستوگرام که زیر 128 هست بیشتره یا مجموع مقادیر بالای اون
یه تصویر خاکستری به نام img داریم

h = hist(img(:), 0:255);
nime_avval = sum(h(1:127));
nime_dovom = sum(h(128:256));
if (nime_avval > nime_dovom)
disp('tarik')
else if (nime_avval == nime_dovom)
disp('na tark na roshan')
else
disp('roshan')
end

almasm85
شنبه 27 تیر 1394, 13:27 عصر
تشکر از پاسختان
ایده خوبیه اما فکر کنم باید یکم دقیق ترش کنیم . چون به همه تصاویر جواب نمیدهد . مخصوصا عکس های نه سیاه نه تاریک

به نظر شما چه طور میشه از cdf برای این منظور استفاده کرد ؟

rahnema1
شنبه 27 تیر 1394, 20:36 عصر
محدوده مقادیر بین 0 تا 255 را به سه قسمت مساوی تقسیم کنید و هر کدام مجموعش بیشتر بود همون انتخاب بشه

h = hist(img(:), 0:255);
names = {'tarik' , 'beinabein', 'roshan'};
values= [ sum(h(1:127)); ... %tarik
sum(h(128:170));... %beinabein
sum(h(171:256))]; %roshan
[mx idx ] = max(values);
disp(names{idx})

almasm85
سه شنبه 30 تیر 1394, 17:48 عصر
ممنونم اینم امتحان میکنم .

یک نکته ای از پیک هیستوگرام چطور میشه استفاده کرد ؟ البته با توجه به اینکه یک هیستوگرام میتونه چندین پیک داشته باشه . مثلا یک تصویر تاریک میتونه یک پیک در ناحیه روشن داشته باشه.
ولی تجمع داد ها در یک قسمت مشکی باشه.


یه نکته دیگه هم هست ، چطور می تونیم مکان تجمع داده ها رو پیدا کنیم . اصلا از نظر آماری این بحث با چه چیزی نشون داده می شه ؟

rahnema1
سه شنبه 30 تیر 1394, 21:57 عصر
ممنونم اینم امتحان میکنم .

یک نکته ای از پیک هیستوگرام چطور میشه استفاده کرد ؟ البته با توجه به اینکه یک هیستوگرام میتونه چندین پیک داشته باشه . مثلا یک تصویر تاریک میتونه یک پیک در ناحیه روشن داشته باشه.
ولی تجمع داد ها در یک قسمت مشکی باشه.


یه نکته دیگه هم هست ، چطور می تونیم مکان تجمع داده ها رو پیدا کنیم . اصلا از نظر آماری این بحث با چه چیزی نشون داده می شه ؟

از پیک هیستوگرام مثلا برای تفکیک پیش زیمنه از پس زمینه می تویم استفاده کنیم
با فرض اینکه تصویر ما از دو تا پیک تشکیل شده باشه روشهای مختلف جهت ایجاد ترشولد و تفکیک پیش زمینه از پس زمینه استفاده شده
یکی از روشها روش otsu هست که اتفاقا در خود متلب هم تابعی به نام graythresh همین الگوریتم را اجرا می کنه پیشنهاد می کنم در خصوص این الگوریتم مطالعه کنید
مکان تجمع داده ها هم که همون میانگینه

almasm85
چهارشنبه 31 تیر 1394, 17:07 عصر
ممنونم از راهنمایی شما