چند روز پیش در نوشته پیدایش فوتوشاپ نوشتم که توماس پس از خرید کامپیوتر مکنتاش خودش از این که نمیتواند تصاویر رنگی را به تصاویر طیف خاکستری تبدیل کند، ناراحت بود و خودش برنامه کوچکی را برای تبدیل تصاویر رنگی به تصاویر طیف خاکستری نوشت.

خوب راستش تابع تبدیل تصاویر رنگی به طیف خاکستری خیلی سادهتر از آن چیزی است که به نظر میآید. من در این نوشته این تابع را آوردهام و درباره آن توضیحاتی هم میدهم. اما پیش از این باید توضیحی درباره تصاویر Black and White و تصاویر Grayscale بدهم. تصاویر Black and White یعنی تصاویری که تنها و تنها در ساخت آنها از دو رنگ سیاه و سفید استفاده شده است. اما تصاویر Grayscale تصاویری هستند که رنگهای آن از طیف خاکستری تشکیل شده است. بدبختانه ما در فارسی برای هر دو نوع تصاویر واژه «سیاه و سفید» را به کار میگیریم.
به هر روی من در این نوشته تابع تبدیل تصاویر رنگی به تصاویر طیف خاکستری یا Grayscale در C را آوردهام:
for(i=0;iw-1;i++){
for(j=0;jh-1;j++){
color=getpixel(temp,i,j);
r=getr32(color);
g=getg32(color);
b=getb32(color);
h=(r+b+g)/3;
putpixel(temp1,i,j,makecol(h,h,h));
}
}
در این تابع با کمک دو حلقه تو در تور تمامی پیکسلها ستون به ستون و سپس پیکسل به پیکسل پیمایش شده است. تابع getpixel رنگ پیکسل فعلی را میخواند و سپس رنگ استخراج شده به کمک تابع getr32 و getg32 و getb32 به سه رنگ قرمز، سبز و آبی تجزیه میشود. این توابع روی تصاویر 32 بیتی (تصاویری که هر رنگ در 32 بیت نوشته شده است و بنابراین در این تصاویر میتوان 4,294,967,296 رنگ را به کار گرفت) کار میکنند. تابعهای مشابهی برای کار کردن با تصاویر 24، 16، 15، 8، 7، 4 و 2 بیتی هم وجود دارد. بنابراین در این تابع فرض بر این گذاشته شده است که تصویر ورودی 32 بیت است. پس از این Hue رنگ با کمک فرمول ساده r+b+g/3 استخراج شده است. درباره Hue که یکی از ویژگیهای فضای رنگی HSV یا HSL است اینجا بخوانید.
سپس با به کار گیری تابع MakeCol یک رنگ جدید ساخته شده است و با کمک تابع PutPixel رنگ جدید در تصویر اولیه گنجانده شده است.
مهمترین نکتهای که در این کد وجود دارد، روش تبدیل پیکسل رنگی به برابر طیف خاکستری آن است. نخست باید بدانیم که تمامی رنگهای Grayscale دارای مقادیر یکسان RGB هستند. یا به عبارت دیگر هر رنگی که دارای مقادیر یکسان R و G و B باشد یک رنگ Grayscale است. روش به کار رفته در این کد هم بر پایه همین اصل است.
مقادیر RGB تمام رنگهای Grayscale یکسان هستند
ابتدا مقدار Hue که مهمترین مولفه تشکیل دهنده یک رنگ در فضای رنگی HSV یا HSL است استخراج شده است و رنگی تشکیل شده است که مقدار R و G و B در آن برابر با مقدار Hue استخراج شده است.
- در این رابطه اینجا را هم ببینید
آخرین دیدگاهها
3 روز 7 ساعت پیش
4 روز 8 ساعت پیش
4 روز 20 ساعت پیش
2 هفته 2 روز پیش
2 هفته 4 روز پیش
3 هفته 6 روز پیش
5 هفته 2 ساعت پیش
5 هفته 3 روز پیش
5 هفته 5 روز پیش
6 هفته 6 روز پیش