خاکستری (Grayscale) کردن تصویر (توضیح ساده اضافه شد)
یک تصویر RGB متشکل از سه ماتریس است که هریک از آنها مقادیر Red ( قرمز ) ، Green ( سبز ) و Blue ( آبی ) تصویر رنگی را نگه می دارند. نمایش تصویر بر روی صفحه نمایش نیز از ترکیب مقادیر درآیه های متناظر در سه ماتریس انجام می پذیرد. همانطور که در ابتدا یادآور شدیم ، در بیشتر کاربردها نیازی به تصویر رنگی نداریم و استفاده از یک تصویر خاکستری کافی خواهد بود. یک پیکسل زمانی مقدار خاکستری خواهد داشت که مولفه های R ، G و B آن مقادیر یکسانی داشته باشند. با توجه به این تعریف، در مواردی که تصویر ورودی یک تصویر RGB است، برای Grayscale کردن آن از فرمول زیر می توانیم استفاده می کنیم :
Begin
For I = 1 to M Do
For J = 1 To N Do
Temp = ( input.R( I,J ) + input.G( I,J ) + input.B( I,J ) ) / 3
Output.R ( I,J ) = Temp
Output.G ( I,J ) = Temp
Output.B ( I,J ) = Temp
End For
End For
End
******************************************************************
کریمان :
چون این نمونه سوال رو برای پروژه آخر سال نیز داریم ٬ به صورت ساده توضیح میدم :
توضیح خواسته شده :
من به MATLAB اعتقادی ندارم پس شبه کدشو میگم :
منظور از کد رنگ ، مقداری است که باید از هر رنگ استفاده شود همچنین هر پیکسل از عکس یه مختصات دو بعدی دارد پس برای مثال :
منظور از : R(x, y) کد رنگ (مقدار استفاده) از رنگ قرمز برای پیکسل با مختصات (x, y) است و منظور از S_G(x, y) مقدار استفاده از رنگ سبر برای پیکسل با مختصات (x, y) در عکس نهایی (سیاه سفید) است و چون برای سیاه سفید شدن یک عکس باید مقدار استفاده از رنگ های قرمز آبی و سبز یکسان باشد ، میانگین آنها (کد رنگ آنها) برای همه ی آنها قرار میدهیم.
برنامه رو هم خط به خط توضیح میدم :
Procedure Grayscale( output , input As Bitmap )
تابعی با یک ورودی فایل (فایل رنگی) و یک خروجی فایل (فایل سیاه سفید شده)
Begin
اصطلاحی که در c استفاده نمیشود برای شروع یک برنامه
For I = 1 to M Do
معادل For زبان سی که از 1 تا M تکرار میشود (برای سطر های پیکسل های عکس)
For J = 1 To N Do
معادل For زبان سی که از 1 تا N تکرار میشود (برای ستون های پیکسل های عکس)
Temp = ( input.R( I,J ) + input.G( I,J ) + input.B( I,J ) ) / 3
متغیری موقت به عنوان temp ایجاد میکنیم و میانگین کد رنگ های RGB رو توش میریزیم
Output.R ( I,J ) = Temp
Output.G ( I,J ) = Temp
Output.B ( I,J ) = Temp
برای پیکسل های مختصات ( I,J ) عکس نهایی (سیاه سفید) مقدار temp رو قرار میدهیم (بازم دلیلشو میگم : عکس سیاه سفید کد هر سه رنگ RGB براش یکسانه -در این حالت با تغییر کد ها فقط تیرگی و روشنی عوض میشه-)
End For
پایان For داخلی (تو c با آکولاد این کارو می کنیم )
End For
پایان For خارجی (تو c با آکولاد این کارو می کنیم )
End
اصطلاحی برای پایان برنامه که باز تو c استفاده نمی کنیم (بجاش تو تابع main از آکولاد استفاده میکنیم)
خوب ٬ امیدوارم به درد همه بخوره ! بخونید که آخر ترم یه پیش زمینه ی ذهنی داشته باشید .
پاینده و پیروز باشید !