# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > پردازش تصویر (Image Processing) >  عملکرد histogram equalization در پردازش تصویر

## JalaliMehr

سلام
میخام بدونم چطوری تصویر به صورت خودکار equlize میشه؟

----------


## مصطفی ساتکی

در اینجا به صورت کامل توضیح داده شده.
زمانی histogram equlization انجام می دیم که بخایم میزان contrast تصویر رو افزایش بدیم در حالاتی که تصویر دارای dynamic range کمی باشد یعنی تصویر low contrast هستش و شما بایستی این تصویر رو به صورتی تبدیل کنید که dynamic range آن در کل
تصویر پخش گردد. برای انجام چنین کاری کافیه از تصویر هیستوگرام بگیرید چون بازه intensity از 0 تا 255 هستش شما bins دارید شما یه آرایه 256 دیگه در نظر بگیرید و توزیع تجمعی هیستوگرام رو در این آرایه بریزید
حالا آرایه توزیع  تجمعی را در مقدار   ((255/ (image.width*image.heigh))) ضرب کنید مقادیر جدید بدست آمده را جایگزین مقادیر قبلی کنید یعنی اینکه مقادیر قبلی intensity در تصویر را با مقادیر جدید intensity در آرایه جدید جایگزین کنید به این ترتیب تصویر equlize میشه.

----------


## hasan.najaf

> زمانی histogram equlization انجام می دیم که بخایم میزان contrast تصویر رو افزایش بدیم در حالاتی که تصویر دارای dynamic range کمی باشد یعنی تصویر low contrast هستش و شما بایستی این تصویر رو به صورتی تبدیل کنید که dynamic range آن در کل
> تصویر پخش گردد. برای انجام چنین کاری کافیه از تصویر هیستوگرام بگیرید چون بازه intensity از 0 تا 255 هستش شما bins دارید شما یه آرایه 256 دیگه در نظر بگیرید و توزیع تجمعی هیستوگرام رو در این آرایه بریزید
> حالا آرایه توزیع  تجمعی را در مقدار   ((255/ (image.width*image.heigh))) ضرب کنید مقادیر جدید بدست آمده را جایگزین مقادیر قبلی کنید یعنی اینکه مقادیر قبلی intensity در تصویر را با مقادیر جدید intensity در آرایه جدید جایگزین کنید به این ترتیب تصویر equlize میشه.


با سلام
دوستان کسی میدونه چطوری از عکس هیستوگرام بگیرم؟
مثل اینکه باید یه for تو در تو بنویسم اما نمی دونم چطوری !

----------


## مصطفی ساتکی

بستگی داره من با 2 تا for برات نوشتم با یکی هم میشه.

		int histoGray[256]={0};
		int histoR[256] ={0};
		int histoG[256]={0};
		int histoB[256]={0};
		
		if (img->depth == 8 && img->channels ==1)
		{
			for (int i=0; i < img->height;i++)
			{
				char* row = img->imageData + img->widthStep *i;
				for (int j=0; j < img->width;j++)
					histo[row[j]]++;
			}
		}
		else if (img->depth == 8 && img->channels ==3)
		{
			for (int i=0; i < img->height;i++)
			{
				char* row = img->imageData + img->widthStep *i * 3;
				for (int j=0; j < img->width;j++)
				{
					histoB[row[j*3]]++;
					histoG[row[j*3+1]]++;
					histor[row[j*3+2]]++;
				}
			}

		}

----------


## mortezamsp

برای تعدیل نور تصویر باید تصویر رو ببریم به فضای رنگی دیگه ، مثلا تصویر رو ببریم به فضای LAB و بعد اونجا لومینانس رو تعدیل هیستوگرام کنیم و بعد دوباره تصویر رو ببریم به rgb .

----------


## leader_one

> برای تعدیل نور تصویر باید تصویر رو ببریم به فضای رنگی دیگه ، مثلا تصویر رو ببریم به فضای LAB و بعد اونجا لومینانس رو تعدیل هیستوگرام کنیم و بعد دوباره تصویر رو ببریم به rgb .


دوست گرامی، می شه لطف کنین و منبعی که در این مورد اطلاعاتی داده رو معرفی کنین؟

مطمئن هستید همچین چیزی درسته؟

----------


## mortezamsp

خودتون امتحان کنید.
منبع فارسی : 


> مؤلفه لومینانس تصویر را می‌توان بدون اثر گذاری در محتوای رنگ پردازش کرد‌.

----------


## مصطفی ساتکی

> دوست گرامی، می شه لطف کنین و منبعی که در این مورد اطلاعاتی داده رو معرفی کنین؟
> 
> مطمئن هستید همچین چیزی درسته؟


خوب تصویر رنگی تو فضای hsi از از hue و saturation و intensity از این 3 مقوله تشکیل شده  و hue و saturation دلیلی نداره دستکاری بشه شما فقط intensity تصویر رو دستکاری می کنید منبع هم کتاب گنوزالز بخش فضای رنگی

----------

