PDA

View Full Version : یدا کردن محل صعود و نزول در هیستوگرام تصویر در متلب



almasm85
یک شنبه 12 مهر 1394, 15:46 عصر
سلام
من میخام در هیستوگرام تصویر ، محلی که شروع به زیاد شدن می کند و محلی که به پایین نمودار میرسه و خط افقی را قطع می کند را پیدا کنم . مثلا در تصویری که ارسال کردم . دو نقطه مشخص شده را میخوام پیدا کنم و توی متلب پیاده سازی کنم .
به نظر شما چه طور میتونم این دو نقطه را پیدا کنم .

135698

rahnema1
یک شنبه 12 مهر 1394, 16:51 عصر
سلام
فرض کنیم نام هیستوگرام h باشه

first = find(h > 0, 1, 'first');
last = find(h > 0, 1, 'last');

almasm85
یک شنبه 12 مهر 1394, 17:54 عصر
خیلی ممنونم از شما
فقط ممکنه لطف بفرمایید ، یک مقدار توضیح بدید که این کد چه طور عمل میکنه
باز هم تشکر

almasm85
یک شنبه 12 مهر 1394, 19:01 عصر
البته این کد به من دو عدد میدهدکه ماکزیمم و مینیمم هست . من جایی که هیستوگرام شروع به بالا رفتن میکنه و جایی که به محور افق می رسه رو میخام .

rahnema1
یک شنبه 12 مهر 1394, 21:26 عصر
توضیح خاصی نداره
ابتدا و انتهای هیستوگرام جاهایی هست که مقدار هیستوگرام معمولا برابر با صفره بنابراین باید به دنبال اولین و آخرین نقاطی باشیم که مقدار هیستوگرام اونها بیشتر از صفر باشه
دستور find هم اگه با گزینه first اجرا بشه جستجو را از ابتدای هیستوگرام انجام میده ولی اگه با گزینه last اجرا بشه جستجو را از انتهای هیستوگرام انجام میده
عدد 1 که گذاشتیم هم واسه اینه که اولین موردی که پیدا کرد دیگه به جستجو ادامه نده
حالا دقیقا نمیدونم واسه چی این کار برد داره اگه بتونید در مورد کاربردش توضیح بدید شاید بهتر بشه به یه نتیجه رسید

almasm85
یک شنبه 12 مهر 1394, 21:48 عصر
من میخام با یک تابع انتقال هیستوگرام رو به هیستوگرام جدید نگاشت بدم
ولی از دستور min , max استفاده کردم . دیدم که جواب درستی بهم نمیده . چون بعضی از هیستوگرام ها ، یه پراکندگی سمت چپ و راست دارن . مثلا ممکنه تعداد کمی پیکسل داشته باشیم که مقدارشون صفر تا ده باشه . اما من فقط به اون قسمت تجمع داده ها کار دارم و مقدار هایی که سمت چپ یا راست خیلی کم پراکنده شدن رو لازم ندارم.

almasm85
یک شنبه 12 مهر 1394, 22:01 عصر
احتمالا یک مشخصه آماری هست ... که من نمیدونم چیه ؟
پیدا کردن جایی که منحنی شروع یه افزایش میکنه

rahnema1
دوشنبه 13 مهر 1394, 14:16 عصر
فکر کنم روش مناسب این باشه که مثلا 98 در صد داده های وسط هیستوگرام را نگه دارید و 2 در صد باقی مانده را که در دو طرف هیستو گرام است رها کنید یعنی مثلا از هر طرف یک در صد
در کد زیر h همون هیستو گرام و percent هم میزان درصدی هست که باید رها بشه

function [first, last] = censor_hist(h, percent)
sum_first = cumsum(h);
sum_last = sum_first(end) - sum_first;
percent = sum_first(end) * percent / 2;
first = max(find(sum_first > percent , 1, 'first') - 1 , 1);
last = min(find(sum_last > percent , 1, 'last' ) + 1 , 256);
end

almasm85
سه شنبه 14 مهر 1394, 14:46 عصر
خیلی متشکرم . این عالی هست.

به نظر شما چه طور می تونیم از تعبیر rise time و fall time استفاده کنم .
می دونم که به این مبحث ارتباطی نداره . اما دقیقا همون قسمتی هست که من در هیستوگرام نیاز دارم.



135803
135802

rahnema1
سه شنبه 14 مهر 1394, 15:30 عصر
ببینید واسه پیدا کردن محل صعود یا محل نزول لازمه یه معیاری باشه که بر اساس اون بسنجیم که آیا در یک نقطه خاص اون معیار بیشتر از حد مورد نظر شده که در اون صورت نقطه را به عنوان محل صعود بشناسیم مثل اینجا که ما از معیار در صد استفاده کردیم
و همین روشی که در پست قبل گفتم به خوبی جواب کار را می ده و می تونیم بگیم این روشی که شما اشاره می کنید و روشی که من گفتم هر دو به نوعی یکی هستند

almasm85
سه شنبه 14 مهر 1394, 17:21 عصر
ممنونم از توضیحاتتون