رفتن به مطلب

هیستوگرام و بهبود تصویر


ارسال های توصیه شده

ارسال شده در
این چه حرفیه، انجمن برای سوال کردن دیگه.

 

خب زهرا خانوم توضیح دادن، شما سطوح روشنایی تصویر ورودیت بین 0 تا 255 هست، این منحنی cdf هم که حساب کردی توی 256 تا درایه داره که مقادیر جدید این پیکسل های داخلش قرار داره، تنها کاری که باید انجام بشه اینه که دونه دونه پیکسل ها مفدارشون بررسی بشه (دو تا حلقه اینکار رو می کنن، جهت افقی و عمودی)، بعد هر مقداری داست با یک جمع می کنیم چون آدرس ها توی متلب از یک شروع میشه دیگه، مقدار جدید رو از بردار cdf بر می داریم، مثلا اگه مقدار قبلی پیکسلمون 10 باشه، مقدار جدیدش میشه درایه 11 بردار cdfمون.

 

در مورد اون فرمول هم باید بیشتر توضیح داده بشه، هر کدوم از این متغیر هایی که استفاده شدن چی هستن، int فکر کنم برای integer باشه، L هم تعداد سطوح روشنایی.

سلام

مقدار جدید رو چطور بر می داریم؟

یا اون out که من گذاشتم درست هست یا غلط؟

  • Like 1
ارسال شده در
سلام

مقدار جدید رو چطور بر می داریم؟

یا اون out که من گذاشتم درست هست یا غلط؟

 

مثلا تصویر وردی مون این باشه با 8 سطح روشنایی:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

خب ماتریس cdfمون رو در 7 ضرب کردیم و رندشون کردیم، مثل ورودی مون بین 0 تا 7 بشه:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

یعنی به جای سطح روشنایی اول و دوم باید 0 بذاریم، برای سطح روشنایی سوم باید 1 بذاریم، برای سطح روشنایی چهارم (یعنی 3) باید 3 بذاریم، همینطور تا آخر، تصویر خورجی مون میشه این:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

  • Like 2
ارسال شده در
مثلا تصویر وردی مون این باشه با 8 سطح روشنایی:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

خب ماتریس cdfمون رو در 7 ضرب کردیم و رندشون کردیم، مثل ورودی مون بین 0 تا 7 بشه:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

یعنی به جای سطح روشنایی اول و دوم باید 0 بذاریم، برای سطح روشنایی سوم باید 1 بذاریم، برای سطح روشنایی چهارم (یعنی 3) باید 3 بذاریم، همینطور تا آخر، تصویر خورجی مون میشه این:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

مرسی. خیلی محبت کردید همه دوستان

اما من نتونستم پیاده سازیش کنم.

:icon_gol:

  • Like 1
ارسال شده در

این الگوریتم تعدیل سازی هیستوگرام هست:

hlhokgi797yvuzatarp7.jpg

اینم کد مربوطه که من ازش جواب گرفتم:

 


f=imread('0.jpg');
hnorm=imhist(f)./ numel(f);
cdf=round(cumsum(hnorm)*255);
for i=1:size(f,1)

for j=1:size(f,2)

f(i,j)=cdf(f(i,j)+1);

end

end
imhist(f)

تصویری که هم گذاشتین، واضح نیست!

یه کد دیگه هم از تعدیل سازی هیستوگرام دارم که بدون استفاده از توابع متلب نوشته شده، اگه خواستی برات بفرستم.

  • Like 2
ارسال شده در

سلام زهرا جان دستتون درد نکنه محبت کردید

من دوباره عکس از هر کدوم فرمول ها جدا عکس گرفتم(3 تا عکس) محبت می کنید یه نگاه بندازید؟

عزیزم لطف کردید من برام با حلقه ها کار کردن خیلی سخت هست. الانم بس که استرس دارم دیگه اوضاع بدتر شده.:ws52:

1.PNG

2.jpg

3.jpg

  • Like 2
ارسال شده در
سلام زهرا جان دستتون درد نکنه محبت کردید

من دوباره عکس از هر کدوم فرمول ها جدا عکس گرفتم(3 تا عکس) محبت می کنید یه نگاه بندازید؟

عزیزم لطف کردید من برام با حلقه ها کار کردن خیلی سخت هست. الانم بس که استرس دارم دیگه اوضاع بدتر شده.:ws52:

به اون L-1 و 0.5

تو فرمول3 شک دارم که نکنه فرق داشته باشه :banel_smiley_4:

  • Like 1
ارسال شده در
سلام زهرا جان دستتون درد نکنه محبت کردید

من دوباره عکس از هر کدوم فرمول ها جدا عکس گرفتم(3 تا عکس) محبت می کنید یه نگاه بندازید؟

عزیزم لطف کردید من برام با حلقه ها کار کردن خیلی سخت هست. الانم بس که استرس دارم دیگه اوضاع بدتر شده.:ws52:

 

به اون L-1 و 0.5

تو فرمول3 شک دارم که نکنه فرق داشته باشه :banel_smiley_4:

 

سلام

به نظرم L باید همون 256 (تعداد سطوح) باشه، که یکی کم می کنیم بشه ماکزیمم سطح روشنایی، اون نیم هم واسه این گذاشته اگه به مقدار بالایی نزدیک تر بود به اون گرد بشه، مثلا من عددم وقتی در L منهای یک ضرب میشه بدست بیاد، 200.75، همینجوری به پایین گرد کنه میشه 200، ولی وقتی با نیم جمع کنه بعد گردش کنه به پایین میشه 201.:a030:

  • Like 3
ارسال شده در
سلام

به نظرم L باید همون 256 (تعداد سطوح) باشه، که یکی کم می کنیم بشه ماکزیمم سطح روشنایی، اون نیم هم واسه این گذاشته اگه به مقدار بالایی نزدیک تر بود به اون گرد بشه، مثلا من عددم وقتی در L منهای یک ضرب میشه بدست بیاد، 200.75، همینجوری به پایین گرد کنه میشه 200، ولی وقتی با نیم جمع کنه بعد گردش کنه به پایین میشه 201.:a030:

سلام

پس احتمالا به جای استفاده از hiteq باید خود این فرمول رو پیاده سازی کنم.:w58:

 

می دونید T و Tmin چطور محاسبه می شه؟:ws37:

  • Like 1
ارسال شده در
سلام

پس احتمالا به جای استفاده از hiteq باید خود این فرمول رو پیاده سازی کنم.:w58:

 

می دونید T و Tmin چطور محاسبه می شه؟:ws37:

 

سلام

خیلی شبیه histeq هست.

 

T رو که فرمولش رو داری، وقتی محاسبه ش کردی، کوچکترین مقدارش میشه Tmin.

  • Like 3
ارسال شده در

سلام

من چند تا سئوال داشتم . اگر راهنمایی بفرمایید ممنون میشم.

 

ا) دستور hist ,histeq برای تصاویر از نوع unit8 هستند و نمی شه برای تصویر از نوع double استفاده بشن؟

2) وقتی یه تصویر به double تبدیل می شه دیگه نمی شه خط افقی هیستوگرام از 0 تا 255 باشه؟

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

وقتی بیشترین مقدار L یک هست چه طور باید خط افقی از 0 تا 255 باشه؟

چطوری رسمش کنم درست

دستور plot(h,256) رو بلدم اما باز یه جور دیگه رسم می کنه.:hanghead:

  • Like 1
ارسال شده در
سلام

من چند تا سئوال داشتم . اگر راهنمایی بفرمایید ممنون میشم.

 

ا) دستور hist ,histeq برای تصاویر از نوع unit8 هستند و نمی شه برای تصویر از نوع double استفاده بشن؟

2) وقتی یه تصویر به double تبدیل می شه دیگه نمی شه خط افقی هیستوگرام از 0 تا 255 باشه؟

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

وقتی بیشترین مقدار L یک هست چه طور باید خط افقی از 0 تا 255 باشه؟

چطوری رسمش کنم درست

دستور plot(h,256) رو بلدم اما باز یه جور دیگه رسم می کنه.:hanghead:

 

سلام

ببین نینا خانوم متلب تصویر دابل رو بین یک و صفر فرض می کنه، یعنی مقادیر بزگتر از یک رو یک در نظر می گیره و مقادیر کوچیکتر از صفر رو هم صفر، در واقع تصویرت رو تقسیم بر 255 می کنی. به جای دستور double برای تصویر از im2double استفاده کن، مقادیر خروجیش بین صفر و یک میشه:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

برای نمایشش هم باید از stem استفاده کنی که شبیه متلب بشه:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

  • Like 3
×
×
  • اضافه کردن...