كيف يعرض الماتلاب الوان البيكسل
كما نعلم تتكون الصورة من مصفوفة من الارقام كل رقم فى هذه المصفوفة يعبر عن لون البكسل
فمثلا اذا كان الرقم يساوى 255 فان هذا البيكسل يكون لونه ابيض.
ومن الممكن من خلال الماتلاب من عرض ان مصفوفة فى هيئة صورة ويعتمد هذا على الامر المستخدم
فمثلا يمكننا عرضها بالابيض والاسود فقط كما فى الصورة الاتيه
او من الممكن عرضها بمجموعة محدده من الالوان
فعلى سبيل المثال الصورة الاتيه معروضه بتدرجات اللون الاخضر
والان سنبدا فى معرفة انواع الصور
اى بمعنى أخر طريقة عرض الماتلاب لالوان البيكسل المختلفة
ويوجد بالماتلاب ثلاثة انواع
اولا :: اللون الحقيقى
وهى كما نراها فى أجهرة الكمبيوتر العادية والتى تكون متولده من الكاميرا او الاسكانر
اما النوعين الاخرين فيسمى فى الماتلاب
ويستخدم فى اظهار البيانات العلمية والهندسية بالوان يكون لها تدريج معين مثل صور التوزيعات الحرارية
اما اذا كان لدينا فى نسخة الماتلاب
فانه سيكون لدينا نوعان اخرين وهما
وهو توزيعات اللون الرمادى ويبدا من الابيض الى الاسود
والنوع الاخر هو
Indexed and scaled indexed Image Processing Toolbox Grayscale Binary
اولا الصورة ذات الالوان الحقيقية
Truecolor Images
وفى الصورة ذات الالوان الحقيقية يكون لكل بيكسل ثلاث قيم والتى تعبر عن قيم اللون الاحمر واللون الاخضر واللون الازرق وهى الالوان الاساسية لاى صورة والان سنقوم بعمل صورة تتكون من مجموعة من الالوان وهذه الصورة عبارة عن مصفوفة 44 لكل عنصر فيها يمثل بيكسل ولكل لون من الالوان الاساسية مصفوفة 22 والتى عدد عناصرها 4 بحيث يرمز كل عنصر الى مكان بيكسل معين فمثلا بالنسبة للون الاحمر قم بتنفيذ الامر الاتى
>>red = [1 0; 0 0]
وهذا معناه ان البيكسل رقم واحد سيكون لونه أحمر كما يلى
وبالنسبة للون الاخضر
>>green = [0 1; 0 0]
وبالنسبة للون الازرق
>>blue = [0 0; 1 0]
ثم نقوم بتجميع الثلاثة الوان باستخدام الامر Cat والذى يستخدم فى دمج المصفوفات لعمل Array قم بتنفيذ الامر الاتى
>>truecolor_image = cat(3, red, green, blue);
ثم لعرض ال Array على هيئة صورة بالالوان الحقيقة استخدم الامر الاتى
>>image(truecolor_image)
ثانيا: Indexed images
وفى هذا النوع القيمة الموجود فى المصفوفة لا تحدد اللون مباشرة كما سبق ولكن تستخدم فى عملية بحث عن اللون المطابق فى خريطة الالوان المستخدمة
والان سنقوم بعمل مثال على هذا النوع فمثلا يوجد فى الماتلاب ملف اسمه Clown.mat قم الان بتحميل هذا الملف عن طريق الامر الاتى
>>load clown
وللتعرف على محتويات الملف بعد تحميله استخدم الامر الاتى
>>wh
فيرجع لنا الماتلاب القيم الاتيه
Name Size Bytes Class
X 200x320 512000 double array
caption 2x1 4 char array
map 81x3 1944 double array
Grand total is 64245 elements using 513948 bytes
حيث يحتوى المتغير X على بيانات الصورة وقيم البيكسل اما المتغير map فيحتوى على خريطة الالوان المستخدمة لعرض الصورة بناء على هذه الخريطة والان لعرض الصورة كما فى الملف بالخريطة الاساسية
استخدم الامر الاتى
>>image(X)
وسيكون شكلها كما يلى :
اما اذا استخدمنا خريطة الالوان الموجودة فى الملف فسيكون من خلال الامر الاتى
>> colormap(map)
وسيكون شكلها كما يلى :
ويمكنك ايضا استخدام نوع اخر من خرائط الالوان الموجودة فى الماتلاب فمثلا قم بتنفيذ الامر الاتى :
>> colormap(cool)
وسيكون شكلها كما يلى :
والان ننتقل الى النوع الثالث من الصور وهو
وهو مثل النوع السابق حيث يستخدم قيمة المصفوفة فى البحث داخل خريطة الالوان ويمتاز هذا النوع عن السابق انه يتم اختيار اللون بصورة خطية مما يتيح دقة أكثر للصورة ويكون ذلك عن طريق استخدام الامر الاتى
والان سنقوم بعمل مثال بسيط على هذا النوع وتطبيقه على مصفوفة المربعات السحرية
اولا قم بتنفيذ الامر الاتى :
Scaled indexed images Imagesc
>> a=magic(5)
هذا الامر يقوم بعمل مصفوفة المربعات السحرية 5 * 5
كما يلى :
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
والان سنقوم بعرض هذه المصفوفة على هيئه صورة وباستخدام خريطة ألوان اللون الرمادى كما يلى :
>> image(a)
>> colormap(gray)
وستظهر لنا الصورة كما يلى :
ونلاحظ عدم وجود اللون الابيض وذلك لان قيمة المصفوفة a تتراوح من 1 الى 25 ولذلك تستخدم هذه الصورة اول 25 عنصر من عناصر خريطة تدرجات اللون الرمادى والتى تكون اغلبها قريبة من اللون الاسو
اما عند استخدام الامر الاتى :
>> imagesc(a)
فسيكون شكل الصورة كما يلى :
وتفسير ظهور اللون الابيض فى الصورة هو ان هذا الامر (imagesc(a
يقوم بتخصيص اعلى عنصر فى مصفوفة الصورة الى اعلى عنصر فى خريطة الالوان واقل عنصر فى مصفوفة الصورة الى اقل عنصر فى خريطة ويقوم بايجاد العناصر الواقعة بينهم بصورة خطية
ويجب علينا ملاحظة ان الصور فى الماتلاب تكون على صورة Objects وتكون لها خصائص معينة ومن هذه الخصائص CDataMapping والتى تحدد نوع الصورة ال indexed او فمثلا قم بتنفيذ هذا الامر Direct Scaled
>> b=image(a)
>> get(b,'CDataMapping')
وسيكون نتيجة التنفيذ كما ياتى
ans =
Direct
ولكن اذا استخدمنا الامر الاتى :
>> b=imagesc(a)
>> get(b,'CDataMapping')
فستكون نتيجة التنفيذ كما ياتى
ans =
Scaled
وفى حالة الصورة Scaled فانه توجد خاصية تسمى CLim والتي تتحكم فى أعلى قيمة واقل قيمة للألوان فى خريطة الألوان والتي تكون مثل أعلى واقل قيمة فى المصفوفة فمثلا قم بتنفيذ الأمر الاتى
>> get(gca, 'CLim')
والناتج
ans =
1 25
ويمكننا اعادة تخصيص هذه القيم مرة أخرى عن طريق الامر الاتى
>> imagesc(a, [10 15])
وهذا الأمر يقوم بتخصيص القيمة 10 الى اقل قيمة فى خريطة الألوان وهى الاسود ويقوم بتخصيص القيمة 15 إلى أعلى قيمة فى خريطة الألوان وهى اللون الابيض
وتكون نتيجة تنفيذه كما يلى :
وهذا النوع مهم جدا فى التعامل مع البيانات الهندسية وذلك لان الصور لا تكون فى الغالب صورا من الانواع العادية انما تكون بيانات ناتجه من قياسات فيزيائية
Grayscale images
صور اللون الرمادى
وهذه الصور تحتوى على بيانات السطوع brightness ويمكن اعتبارها مثل النوع وكما عرفنا ان هذا النوع خاص بى Image Processing Toolbox ولذلك نجد لدينا الان الامرين الاتين imtool and imshow واللذان يستخدمان فى عرض هذا النوع من الصور مباشرة والان سنقوم بعمل مثال بسيط عبارة عن دالة جيب Sinusoidal
قم بتنفيذ البرنامج الاتى فى سطر الماتلاب scaled indexed ولكن تستخدم خريطة الوان تدرجات اللون الرمادى
theta = linspace(0, 2*pi, 256);
I = repmat((-cos(2*theta) + 1)/2, [256 1]);
h = imshow(I)
وستكون نتيجة التنفيذ كما يلى :
وتنفيذ الامر الاتى
get(h, 'CDataMapping')
ans =
scaled
فنجد الصورة من النوع scaled كما ذكرنا سابقا اما اعلى قيمة واقل قيمة فان ال Image Processing Toolbox يقوم بعرضها من صفر للون الاسود و واحد للون الابيض قم بتنفيذ الامر الاتى للتعرف على الحدود
get(gca, 'CLim')
ans =
0 1
وخريطة الألوان المستخدمة تكون دائما هى تدرجات اللون الرمادى مع
ولمعرفة قيم هذه الخريطة قم بتنفيذ الامر الاتى :
Image Processing Toolbox
map = get(gcf, 'Colormap');
ونلاحظ هنا ان جميع القيم من صفر الى واحد
والنوع الاخير هو
Binary images Image Processing Toolbox
وهذا النوع من الصور يحتوى فقط على اللون الابيض واللون الاسود ولذلك سميت بالصورة الثنائية ويكون فى الغالب لون الكتابة هو اللون الابيض ولون الخلفية هو اللون الاسود وهذا النوع ايضا كما سبق خاص بى
وللحصول على مثال على هذا النوع من الصور قم بتنفيذ الامر الاتى
bw = imread('text.png');
islogical(bw)
ans =1
وهذا للتاكد من ان الصورة تحتوى على قيم تساوى صفر وواحد فقط
h = imshow(bw)
وسيكون نتيجة تنفيذ الامر كما يلى :
وهذا النوع من الصور يستخدم غالبا فى عرض الصور التى تحتوى على الكتابة