View Full Version : کار با هیستوگرام تصویر
nina222
چهارشنبه 15 بهمن 1393, 18:36 عصر
سلام
می خواستم بدونم چطور می شه از روی یه هیستوگرام که تغییر داد شده به تصویر جدید رسید.
کد بنده این هست.
a=imread('d:\p.jpg');
f=im2double(a);
h1=imhist(f);
eq=histeq(f);
h2=imhist(eq);
gamma1=(1./(1+0.8))*h1;
gamma2=((0.8./(1+0.8)))*h2;
gamma3=gamma1+gamma2
حالا gamma3 یه هیستوگرام هست. که تغییر پیدا کرده چطور می شه به تصویر جدید رسید. عکس هم سطح خاکستری هست.:ناراحت:
rahnema1
پنج شنبه 16 بهمن 1393, 14:46 عصر
سلام
اگه تصویر خاکستری باشه همون روش histogram matching
a=imread('g.tif');
f=im2double(a);
[h1 ,x1]=imhist(f);
eq=histeq(f);
[h2 , x2]=imhist(eq);
gamma1=(1./(1+0.8))*h1;
gamma2=((0.8./(1+0.8)))*h2;
gamma3=gamma1+gamma2;
sig_h0 = cumsum(h1);
sig_h1 = cumsum(gamma3);
output = zeros(size(a));
for i=1:length(y1)
[mn imn] = min(abs(sig_h0(i) - sig_h1));
output(a==i) = imn;
end
figure,imshow(uint8(output))
nina222
پنج شنبه 16 بهمن 1393, 18:06 عصر
سلام
مرسی .محبت کردید.
اما اجرا نمی شه خطا می ده.
حتی تو حلقه for
y رو به h1 تغییر دادم اما باز خطا می ده. شما اجراش رو دید؟
rahnema1
پنج شنبه 16 بهمن 1393, 18:51 عصر
سلام
مرسی .محبت کردید.
اما اجرا نمی شه خطا می ده.
حتی تو حلقه for
y رو به h1 تغییر دادم اما باز خطا می ده. شما اجراش رو دید؟
درسته به جای y باید h باشه اما من توی octave اجرا گرفتم میشه بگید کدوم خط خطا میده
nina222
شنبه 18 بهمن 1393, 10:16 صبح
سلام
متشکرم از راهنمایی شما.
برنامه اجرا شد.
یه مقدار تو درک خطوط آخر برنامه مشکل دارم. سعی خودم رو می کنم که متوجه بشم. اگر نتونستم باز هم مزاحمتون می شم.
باز هم ممنونم
nina222
یک شنبه 19 بهمن 1393, 00:26 صبح
سلام
ببخشید من فکر می کردم h2 باید با histeq محاسبه بشه. اما متوجه شدم h2 در واقع uniform histogram تصویرم هست. تو کتاب گنزالس هم دنبالش گشتم اما کدش رو پیدا نکردم.
می شه اگه در این مورد اطلاعات دارید تو پیاده سازیش به من کمک کنید؟
متشکرم
rahnema1
یک شنبه 19 بهمن 1393, 13:14 عصر
سلام
ببخشید من فکر می کردم h2 باید با histeq محاسبه بشه. اما متوجه شدم h2 در واقع uniform histogram تصویرم هست. تو کتاب گنزالس هم دنبالش گشتم اما کدش رو پیدا نکردم.
می شه اگه در این مورد اطلاعات دارید تو پیاده سازیش به من کمک کنید؟
متشکرم
کار histeq اینه که نزدیکترین هیستوگرام به هیستوگرام یکنواخت را ارائه بده
اما اگه می خواهید هیسوگرام خیلی تخت باشه لازمه علاوه بر پردازش روی هیستوگرام ،پردازش روی پیکسلهای مجاور هم صورت بگیره
nina222
جمعه 24 بهمن 1393, 13:44 عصر
کار histeq اینه که نزدیکترین هیستوگرام به هیستوگرام یکنواخت را ارائه بده
اما اگه می خواهید هیسوگرام خیلی تخت باشه لازمه علاوه بر پردازش روی هیستوگرام ،پردازش روی پیکسلهای مجاور هم صورت بگیره
مرسی از راهنمایی شما
ببخشید اینکه ما تصویر رو به شیوه ای که شما فرمودید از هیستوگرام به دست بیاریم نتیجه اش فرق داره به اینکه از این کد استفاده کنیم؟
J = histeq(I,hgram)
که hgram همون gamm3 باشه.:لبخندساده:
rahnema1
جمعه 24 بهمن 1393, 13:48 عصر
بله (histeq(I,hgram همون histogram matching هست
nina222
جمعه 24 بهمن 1393, 13:54 عصر
بله (histeq(I,hgram همون histogram matching هست
چه جالب پس هر بار خواستیم از یه هیستوگرام تغییر داده شده (مربوط به عکس خاکستری ) به تصویر برسیم این دستور کافی هست؟ و همیشه جواب می ده؟
rahnema1
جمعه 24 بهمن 1393, 14:00 عصر
خب کارش اینه که هیستوگرام را تا حد امکان به هیستوگرام بعدی شبیه می کنه دیگه
یک نکته چون من به جای متلب از برنامه octave استفاده می کردم تابع histeq گزینه hgram نداشت و فقط کار تخت کردن هیستوگرام را انجام می داد الان که بررسی کردم دیدم متلب این قابلیت را داره
nina222
شنبه 25 بهمن 1393, 01:11 صبح
خب کارش اینه که هیستوگرام را تا حد امکان به هیستوگرام بعدی شبیه می کنه دیگه
یک نکته چون من به جای متلب از برنامه octave استفاده می کردم تابع histeq گزینه hgram نداشت و فقط کار تخت کردن هیستوگرام را انجام می داد الان که بررسی کردم دیدم متلب این قابلیت را داره
مرسی دوست عزیز
nina222
چهارشنبه 13 اسفند 1393, 14:13 عصر
کار histeq اینه که نزدیکترین هیستوگرام به هیستوگرام یکنواخت را ارائه بده
اما اگه می خواهید هیسوگرام خیلی تخت باشه لازمه علاوه بر پردازش روی هیستوگرام ،پردازش روی پیکسلهای مجاور هم صورت بگیره
سلام
من توی پیاده سازیم به جای uniform histogram از histogram equalization استفاده کردم یعنی فکر می کردم منظورش این بوده ولی نتیجه خیلی خوب نشد. کدuniform histogram رو بلد نیستم
می شه لطفا راهنماییم کنید؟
rahnema1
چهارشنبه 13 اسفند 1393, 15:31 عصر
سلام، همونه مگه تو مقاله هیستوگرام دقیقا تخت شده؟ وقتی میگن uniform قاعدتا منظور همون equalization هست
چه باید بشه و چی شده؟
nina222
پنج شنبه 14 اسفند 1393, 18:44 عصر
سلام، همونه مگه تو مقاله هیستوگرام دقیقا تخت شده؟ وقتی میگن uniform قاعدتا منظور همون equalization هست
چه باید بشه و چی شده؟
چون نتیجه نهایی پیاده سازی با مقاله متفاوت بود .فکر کردم اشکال کار اینجاست.
sim-power
سه شنبه 27 مرداد 1394, 22:33 عصر
به دست آوردن مکمل یک تصویر با دستور imcomplement در متلب : (http://sim-power.ir/%D8%A8%D9%87-%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D9%85%DA%A9%D9%85%D9%84-%DB%8C%DA%A9-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D9%85%D8%AA%D9%84%D8%A8/)با استفاده از دستور imcomplement در متلب، می توانیم مکمل یک تصویر را به دست بیاوریم. برای درک مفهوم تصویر مکمل، برایتان یک مثال می زنم. فرض کنید که پیکسل های یک تصویر، با دو عدد 0 و 1 تعریف شده باشند، مثلا عدد 1 ، برای رنگ سفید و عدد 0 ، برای رنگ سیاه. برای به دست آوردن مکمل این تصویر، هر عدد 1 ، به عدد 0 و هر عدد 0 ، به عدد 1 ، تبدیل می شود و در واقع جای دو رنگ سیاه و سفید با هم عوض می شود. در این مثال، تنها دو رنگ سیاه و سفید را داشتیم و بنابراین در تعریف ماتریس مربوط به تصویر، تنها از دو عدد 0 و 1 استفاده می شود.
برای تصاویر با تعداد رنگ بیشتر، تعداد N رنگ خواهیم داشت که باعث می شود در ماتریس مربوط به تصویر، از تعداد N عدد برای تعریف رنگ ها استفاده کنیم. در این حالت، برای محاسبه عدد مربوط به هر پیکسل تصویر مکمل، از فرمول زیر استفاده می کنیم (مقدار عدد مربوط به آن پیکسل را با pixel_number نمایش داده ایم) :
pixel_number= N-pixel_number
به مثال زیر توجه کنید :
مثال :
clear all
close all
clcimg_1=imread('image.jpg');
imshow(img_1);img_2=imcomplement(img_1);
figure
imshow(img_2);
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.