Color Representation in Computer Graphics - Lecture 5

مقدمة
  • الشابتر ده بيتكلم عن تمثيل الألوان في Computer Graphics.
  • هنفهم يعني إيه color، إزاي العين بتشوف الألوان، الفرق بين RGB و CMY/CMYK، وبعدها هندخل على Frame Buffers وإزاي pixels بتتخزن في الذاكرة.

1) Introduction to Coloring

  • اللون بيلعب دور أساسي في الـ Computer Graphics.
  • بيزود الواقعية، بينقل المعلومات، وبياثر على مشاعرنا.
  • استخدامات الـ Color في مجالات مختلفة:
    • Graphical User Interfaces (GUIs)
    • Digital Art
    • Scientific Visualization
    • Virtual Reality

2) What is Color?

definition

Color is not an intrinsic physical property of objects. It is a perceptual phenomenon caused by the interaction between light, objects, and the human visual system.

  • الـ Color ده مش حاجة فيزيائية في الجسم نفسه زي وزنه أو حجمه مثلا. دي ظاهرة إدراكية بتحصل جوة دماغنا نتيجة تفاعل تلات حاجات مع بعض: الضوء، الجسم اللي بيعكس الضوء ده، وعينك (أو نظام الرؤية بتاعك). يعني من غير ضوء، مفيش حاجة اسمها لون أصلا.
  • اللون بيظهر عشان فيه:
    • Light
    • Object
    • Human visual system
  • من غير ضوء، مفيش color perception.

3) Light and the Visible Spectrum

  • عشان تفهم اللون، لازم تفهم الضوء الأول. الضوء ده عبارة عن طاقة كهرومغناطيسية بتمشي في موجات ليها أطوال مختلفة بنسميها Wavelengths. الضوء الأبيض بتاع الشمس الي انته بتشوفه، هو خليط من Wavelengths كتير مع بعض.
  • عين الإنسان مش بتشوف كل الطيف الكهرومغناطيسي، إحنا بنشوف حتة صغيرة بس اسمها الـ Visible Light Spectrum.
  • ودي بتبدأ من 400 نانومتر (اللون البنفسجي) لحد 700 نانومتر (اللون الأحمر). طبعا الأطوال الموجية دي نفسها "مش متلونة"، لكن لما بتدخل عينك، نظام الرؤية بتاعك بينتج إحساس اللون.

Visible Spectrum Range

400 nm (Violet)700 nm (Red)

4) Human Vision and Color Perception

The human eye perceives light by focusing it through an elastic lens onto the retina

  • العين بتشتغل ازاي ؟
    • الضوء بيدخل العين وبيتجمع عن طريق عدسة مرنة بينزل على الـ Retina (الشبكية) اللي في آخر العين. الشبكية دي بقى فيها خلايا حساسة للضوء بنسميها Photoreceptor Cells، ودول نوعين أساسيين:
ا Cell Type Function
Rods (عصوية) مسؤولة عن الرؤية في الإضاءة الضعيفة (Low-light conditions)
Cones (مخروطية) مسؤولة عن رؤية الألوان (Color vision)

Cone Cells

  • عندنا 3 أنواع من الـ Cones، كل نوع حساس لمدى معين من الـ Wavelengths بيمثل الألوان دي:
    • الأحمر، الأخضر، والأزرق. استجابة الخلايا دي بتتداخل مع بعضها في حاجة اسمها Response Curves (منحنيات الاستجابة).
  • في الأغلب، حساسية الخلية بتقل كل ما الطول الموجي يبعد عن القمة (Peak) بتاعتها، بس خد بالك ان: الـ Red cone عنده استجابة تانية خفيفة عند الأطوال الموجية القصيرة (ناحية الأزرق).


5) Representation of Color in Computer Graphics

  • بما إن العين بتتعامل مع استجابات قريبة من Red و Green و Blue، نقدر نعيد إنتاج ألوان كتير عن طريق خلط RGB light بكثافات مختلفة.
  • المبدأ ده هو أساس معظم تقنيات العرض الحديثة، زي:
    • CRTs
    • LCDs
    • TFTs
    • Plasma displays
    • Digital projectors
  • في أنظمة الـ graphics، لون كل pixel بيتمثل رقميا باستخدام RGB Triplet.

RGB Triplet

(R, G, B)
  • كل بيكسل (Pixel) على الشاشة بيتمثل بأرقام بنسميها RGB Triplet. الهاردوير بياخد الأرقام دي ويحولها لقوة إضاءة للألوان التلاتة، وعينك هي اللي بتدمجهم عشان تشوف اللون النهائي.

6) Additive and Subtractive Color Models

A) Additive Primary Colors (RGB)

  • ا RGB معناها:
    • ا Red
    • ا Green
    • ا Blue
  • دول اسمهم Additive Primary Colors.
  • اتسموا additive عشان اللون بيتكون بإضافة light بكثافات مختلفة.
  • لو مفيش ضوء، النتيجة Black.
  • كل ما نزود الضوء، brightness تزيد.
  • لو جمعنا Red و Green و Blue بأقصى intensity، النتيجة هتبقي الـ White Light.
Key Idea

الـ RGB ده موديل لخلط "الضوء"، مش خلط ألوان دهانات أو حبر (Not paint or ink).

Applications:
  • الموديل ده بيستخدم في أي نظام بيطلع ضوء من نفسه (Emissive Display Systems) زي:
    • Computer monitors
    • Televisions
    • Projectors

7) Additive Color Mixing

  • لما نخلط لونين من RGB، بنطلع secondary additive colors.
Mix Result
Red + Green Yellow
Green + Blue Cyan
Blue + Red Magenta
Red + Green + Blue White
No RGB Light Black
  • لو غيرنا relative intensities بين R و G و B، نقدر نطلع ألوان كتير جدا.

Examples

  • ا Red أكتر من Green ممكن يطلع Orange.
  • ا Green أكتر من Red ممكن يطلع Lime.
  • خلطات غير متساوية من التلاتة ممكن تطلع Brown أو complex colors.
  • التحكم المستمر في intensity هو اللي بيخلي الأنظمة الرقمية تمثل ملايين الألوان.

بصمجيات

ا Additive Mixing زي الـ RGB ,بيضيف light , كل ما بنضيف الوان الاضاءه بتزيد لحد ما تبقي ابيض , لو مضفناش حاجة بتبقي اسود, بيشتغل مع الشاشات والحاجات الديجيتال


8) Subtractive Primary Colors (CMY)

  • لما نتعامل مع الاصباغ (Pigments)، خلط الألوان بيشتغل بطريقة تانية.
  • الموديل ده اسمه Subtractive (طرحي) عشان إحنا بنطرح أو بنمتص (absorb) الضوء مش بنطلعه, هنا إحنا مش بنضيف light، إحنا بنمتص أو نشيل wavelengths معينة ونسيب غيرها ينعكس.
  • ده اسمه Subtractive Color Mixing.

Subtractive Primary Colors

  • Cyan
  • Magenta
  • Yellow

How It Works

  • الجسم الأصفر بيبان أصفر عشان بيعكس wavelengths الخاصة بالأصفر ويمتص غيرها.
  • ا Cyan بيعكس green-blue wavelengths.
  • ا Magenta بيعكس red-blue wavelengths.

Example

Yellow + Cyan → Green
  • نظريا، خلط Cyan + Magenta + Yellow يمتص كل الضوء المرئي ويطلع black.

بصمجيات

ا Subtractive Mixing زي الـ CMY (أو CMYK)، بيمتص الـ light، كل ما بنضيف حبر الإضاءة بتقل لحد ما تبقى أسود، لو مضفناش حاجة بتبقى أبيض (اللي هو لون الورقة الفاضية)، بيشتغل مع الطباعة والحبر والورق.


9) Why CMYK Instead of CMY?

  • نظريا، خلط Cyan, Magenta, و Yellow المفروض يطلع black.
  • عمليا، النتيجة غالبا بتبقى dark brown بسبب عدم نقاء في الحبر.
  • كمان اللون الأسود بيتستخدم كتير جدا في المستندات المطبوعة.
  • عشان كده الطابعات بتضيف ink أسود منفصل اسمه K.

CMYK

C = Cyan
M = Magenta
Y = Yellow
K = Black / Key

Benefits of K

  • بيحسن print quality.
  • بيقلل استهلاك الحبر.
  • بيخلي النصوص والظلال sharp أكتر.

10) RGB and CMYK Color Spaces

definition

Color space defines how colors are represented numerically.

RGB Color Space

  • الـ Color Space (مساحة اللون) دي طريقة رياضية عشان نمثل بيها الألوان بأرقام. خلينا نبص على مساحة الـ RGB بالتفصيل.
  • دي بتتمثل كأنها نقطة في مساحة ثلاثية الأبعاد (3D space)، وبنتخيلها في شكل مكعب اسمه RGB Color Cube. المحاور بتاعت المكعب ده هي الـ Red والـ Green والـ Blue.
  • قيم grayscale موجوده على diagonal جوه RGB Color Cube.

### Important RGB Values
Color RGB Value
Black (0, 0, 0)
White (255, 255, 255)
Grayscale لما R = G = B

11) Hardware Frame Buffers

definition

Frame buffer is a dedicated memory region used to store pixel data for the image currently displayed on the screen.

  • أي صورة بتتعرض على الشاشة عبارة عن مجموعة من البيكسلات.
  • عشان الكمبيوتر يدير الكلام ده بكفاءة بيحجز حتت ميموري ورا بعضها (Contiguous block) مخصصة بس إنها تخزن بيانات الألوان بتاعت البيكسلات دي.
  • الحتة دي من الميموري هي اللي بنسميها الـ Frame Buffer.
  • الـ graphics system يقدر يتحكم في لون كل pixel عن طريق read/write لمكانه في frame buffer.

Historical vs Modern Meaning

  • تاريخيا، Frame Buffer كان معناه memory اللي بتمثل frame المعروض حاليا على الشاشة مباشرة.
  • في الأنظمة الحديثة، المصطلح بقى أوسع.
  • دلوقتي، الكلمة دي بقت بتستخدم عشان توصف أي هيكل ميموري بيخزن بيانات صورة، حتى لو الصورة دي مش بتتعرض بشكل مباشر على الشاشة (زي الـ off-screen buffers والـ textures).


12) Common Frame Buffer Formats

  • الـ hardware systems بتدعم أكتر من نوع frame buffer.
  • كل نوع بيحدد إزاي قيم الـ pixels بتتخزن في memory.
  • الأنظمة المختلفة بتدعم فورماتس كتير للـ Frame Buffer عشان التوافق مع القديم (backward compatibility) وعشان توازن بين استهلاك الميموري، الأداء، ودقة الألوان.

Common Formats

  • Grayscale
  • Pseudo-color / Indexed color
  • True-color

13) Grayscale Frame Buffer

  • ده أبسط نوع عندنا، والناس بتغلط وتسميه "أبيض وأسود"، بس هو في الحقيقة تدرجات الرمادي.
  • في grayscale، كل pixel بيخزن intensity value يمثل درجة رمادي.

Details:

  • أشهر طريقة لتطبيقه هي إن كل بيكسل ياخد 8 bits، وده بيدينا مستوى مختلف من الإضاءة.
    • القيمة 0 بتمثل اللون الأسود (Black).
    • القيمة 255 بتمثل اللون الأبيض (White).
    • الأرقام اللي في النص دي درجات الرمادي (مثلاً 128 ده رمادي متوسط).
  • البيكسلات بتتخزن في الميموري بنظام Row-major order، يعني بنمشي من الشمال لليمين في الصف، ولما يخلص ننزل للصف اللي تحته وهكذا.
  • الصف الواحد الكامل من البيكسلات بنسميه Scan-line.

Memory Size

الدكتور مش مركز عليها ولا حاطط امثله فمش لازم تفهم الفكره اوي احفظ القانون وخلاص
  • بما إن الـ 8 بت بيساووا 1 بايت (1 Byte)، يبقى كل بيكسل في الصورة بياخد مساحة 1 بايت بالظبط في الميموري, عشان كده الحسبة سهله:

  • لو عندك صورة عرضها بيكسل، وطولها بيكسل، يبقى إجمالي عدد البيكسلات هو حاصل ضربهم :

Memory Size = W * H (in bytes)
  • دلوقتي لو أنا عايز ألون بيكسل معين في الإحداثيات ، الكمبيوتر هيعرف مكانه إزاي؟
  • هنا بنحسب حاجة اسمها الـ Offset (اللي هو رمزه )، وده معناه البيكسل ده ترتيبه رقم كام من أول بايت في الميموري.
Memory Offset (A) of pixel (x, y) = x + W * y
  • الإحداثي بيعبر عن رقم الصف (بنبدا من 0). عشان تنزل للصف رقم ، لازم تتخطى عدد من الصفوف الكاملة اللي فوقيك, بما إن كل صف حجمه بيكسل، يبقى إنت هتتخطى مسافة .
  • بعد ما نزلت للصف بتاعك، هتمشي جواه من الشمال لليمين مسافة عشان توصل للبيكسل بتاعك.
  • تجمع الاتنين على بعض يديك المكان بالظبط!
interleaved scan-line storage
  • زمان في الأنظمة القديمة، سرعة الميموري كانت بطيئة جدا مقارنة بسرعة تحديث الشاشة (Screen refresh rate)، وده كان بيعمل مشاكل مستفزة للعين زي الرعشة (Visible flickering) وإن الفريم يترسم نصه بس (Partially drawn frames).
  • الحل: بدل ما نرسم الصورة صف ورا صف بالترتيب، استخدموا نظام الـ Interleaved؛ يعني الشاشة ترسم الصفوف الفردية الأول (1، 3، 5) وبعدين ترجع ترسم الصفوف الزوجية (2، 4، 6).
  • التكنيك ده نجح إنه يداري عيوب الهاردوير الضعيف (Limited hardware)، بس في المقابل عقد الـ Graphics programming جدا على المبرمجين (كلهم بييجوا علي الغلبان).

14) Pseudo-Color Frame Buffer

definition

Pseudo-color frame buffer stores an index per pixel instead of storing the full RGB color directly.

  • اسمه كمان Indexed Color Frame Buffer.
  • الفكرة هنا إن البيكسل مش بيخزن اللون نفسه، لا ده بيخزن "رقم الإندكس" (من 0 لـ 255).
  • أكبر عيب هنا إنك مقدرش تعرض غير 256 لون بس في نفس الوقت على الشاشة، بالرغم من إن الـ RGB مساحته بتشيل أكتر من 16.7 مليون لون ( ).
  • الـ index ده بيشاور على لون في Color Lookup Table (CLUT) أو Palette.

CLUT Mapping

Index → (R, G, B)

Applications:

  • بيستخدم لحد دلوقتي في:
    • ا اLegacy systems (الأنظمة القديمة)
    • ا Backward compatibility modes (أوضاع التوافق)
    • ا Resource-constrained devices (الأجهزة اللي الميموري بتاعتها ضعيفة جداً)

15) True-Color Frame Buffer

definition

True-color frame buffer stores the full RGB color value directly for each pixel.

  • هنا إحنا مش محتاجين جدول ولا وجع دماغ، إحنا بنخزن اللون RGB على طول جوه البيكسل نفسه.

Details:

  • التوزيعة الأشهر هي إننا ندي لكل لون 8 بت:

    • Red: 8 bits
    • Green: 8 bits
    • Blue: 8 bits
  • المجموع هيبقى 24 bits (يعني 3 بايت) لكل بيكسل، وعشان كده بنسميه 24-bit color.

  • الميزة هنا إنك تقدر تعرض الـ 16.7 مليون لون في نفس الوقت، بس العيب إنه بيسحب ميموري قد الـ Pseudo-color تلات مرات، وبيحتاج Bandwidth أعلى.

  • بسبب ان كل بيكسل بياخد 3 Bytes البيكسلات بتتخزن ورا بعضها في الميموري (Sequentially) بالشكل ده:

    • البيكسل الأولاني (0, 0) هياخد اول تلاته بايتس من 0 لـ 2.
    • البيكسل التاني اللي جنبه (1, 0) هياخد البايتس من 3 لـ 5.
    • البيكسل التالت (2, 0) هياخد البايتس من 6 لـ 8.. وهكذا.

Formulas:

  • بما إن البيكسل مبقاش بايت واحد زي زمان، القوانين بتاعتنا لازم تتعدل شوية عشان تضرب في 3. فظهر عندنا مصطلح جديد اسمه الـ Stride.
  • الـ Stride (S): ده بيمثل حجم الصف الواحد الكامل (Scan-line) بالبايت. يعني لو الصورة عرضها بيكسل، يبقى الصف ده هياخد مساحة قد إيه في الميموري؟ هنضرب العرض في 3 (لان البيسل بياخد 3 بايتس).
Stride (S) = 3 * W
  • دلوقتي، لو عايزين نحسب مكان بيكسل معين في الميموري (Offset أو رمزه ) عند الإحداثيات ، هنستخدم المعادلة دي:
Memory Offset (A) of pixel (x, y) = 3x + S * y
  • زي المره الي فاتت
    • عشان تنزل للصف رقم ، لازم تتخطى كل الصفوف اللي فوقيك. بما إن الصف الواحد حجمه بايت، يبقى هتتخطى مسافة .
    • بعد ما وصلت للصف بتاعك، إنت عايز تمشي بيكسل ناحية اليمين. وبما إن كل بيكسل بياخد 3 بايت، يبقى هتمشي مسافة .
    • تجمع الاتنين على بعض، يديك رقم البايت بالظبط اللي بيبدأ عنده البيكسل ده.
لو مش فاهم احفظ القانونين وخلاص الموضوع مش مستاهل

16) Alternative True-Color Formats

  • مش كل الأنظمة بتشتغل بـ 24-bit RGB (ساعات بيتقال عليه RGB888) بس. في فورماتس تانية ظهرت لأسباب تقنية أو معمارية في الهاردوير.

Details:

  • ا BGR Order (BGR888): بعض صيغ الصور زي الويندوز بيت ماب (BMP) بتخزن الألوان بالعكس (أزرق، أخضر، أحمر). ده حصل عشان معالجات الـ PC زمان كانت بتستخدم معمارية الـ Little-endian.
  • الأنظمة الحديثة بتستخدم فورماتس تانية زي:
    • ا RGB565 (16-bit): بيوفر ميموري، بيدي للأحمر 5 بت، والأخضر 6، والأزرق 5.
    • ا RGBA8888 (32-bit): ده بيضيف قناة رابعة اسمها Alpha channel (المسؤولة عن الشفافية)، وكل قناة بتاخد 8 بت (4 بايت للبيكسل).
بصمجيات
  • RGB565 = جودة أقل + ميموري أقل.
  • RGB888 = لون كامل.
  • BGR888 = RGB بالعكس.
  • RGBA8888 = RGB + شفافية.


18) ملخص المحاضرة

كده خلصنا المحاضره

اتكلمنا في المحاضره دي عن Color Representation في الـ Computer Graphics.

بدأنا بمفهوم اللون نفسه وإنه مش خاصية فيزيائية، ده ظاهرة إدراكية ناتجة عن تفاعل الضوء، الجسم، ونظرك.

بعد كده عرفنا Color Models:

  • ا RGB (Additive): خلط ضوء — بيستخدم في الشاشات والبروجيكتور. مفيش ضوء = Black, كل الألوان كاملة = White.
  • ا CMY/CMYK (Subtractive): خلط حبر — بيستخدم في الطباعة. بيمتص wavelengths ويسيب غيرها ينعكس.

وفي الآخر عرفنا Frame Buffer Formats:

  • ا Grayscale: pixel واحد بايت (256 درجة رمادي)
  • ا Pseudo-color: pixel بيخزن index يشاور على لون في CLUT (أقصى 256 لون)
  • ا True-color (RGB888): pixel بيخزن RGB مباشرة — 3 بايت — 16.7 مليون لون
  • ا RGB565 / RGBA8888: فورماتس بديلة للتوفير أو إضافةAlpha channel