วิธีการเช็คสีว่าเป็นโทนสว่าง หรือโทนมืด

ถึงแม้ว่าการตรวจเช็คสีของภาพนั้นจะเป็นเรื่องยาก แต่หากเราต้องการเช็คแค่ว่าสีนี้อยู่ในโทนสีสว่าง หรือ โทนสีมืด เราสามารถเช็คได้ง่ายๆ โดยใช้สมการดังนี้

Darkness = 1-(0.299*R + 0.587*G + 0.114*B)/255;

โดยที่
R คือ ค่าสีแดง มีค่าอยู่ระหว่าง 0-255
G คือ ค่าสีเขียว มีค่าอยู่ระหว่าง 0-255
B คือ ค่าสีน้ำเงิน มีค่าอยู่ระหว่าง 0-255

ถ้าผลการคำนวณมีค่าเกิน 0.5 หมายความว่าโทนสีนั้น เป็นโทนสีมืด แต่ถ้าน้อยกว่า 0.5 ก็คือโทนสีสว่าง

การเช็คความสว่างของสี ได้หลากหลายวิธี เช่น

- การตรวจสอบพระอาทิตย์ตกดิน เพื่อสั่งเปิดไฟ เพราะเมื่อแสงน้อยลง จากสีปกติที่อยู่ในโทนสว่าง ก็จะค่อยๆ เปลี่ยนเป็นสีในโทนมืด

- การเปลี่ยนสีตัวหนังสือ ตามสีของพื้นหลัง อย่างเช่น ถ้าเราจะให้โปรแกรมเขียนข้อความลงในภาพ ซึ่งโดยปกติเราก็จะกำหนดสีตัวอักษรเป็นสีดำ ถ้าหากพื้นหลังเป็นสีโทนสว่าง ก็คงไม่มีปัญหาอะไร แต่ถ้าหากภาพนั้นเป็นสีดำ หรือสีโทนมืด ตัวหนังสือของเราก็จะมองเห็นได้ไม่ชัด หรือมองไม่เห็นเลย ดังนั้นหากเราสามารถตรวจสอบโทนสีของพื้นหลังได้ เราก็จะสามารถกำหนดสีของตัวอักษรให้มองเห็นได้

งั้นเราลองมาดูตัวอย่างกันดีกว่าครับ

ในตัวอย่างนี้ผมจะสร้าง figure ขึ้นมา 1 ตัว แล้วเขียนโปรแกรมให้มันเปลี่ยนสีพื้นหลังทุกครั้งที่เปิดโปรแกรมขึ้นมา โดยเป็นการเปลี่ยนสีแบบสุ่ม ดังนั้นผมจะไม่รู้ว่าในการรันแต่ละครั้งพื้นหลังจะได้สีอะไร จากนั้นผมจะเขียนข้อความ 1 ข้อความลงไปใน figure นี้ แล้วเรามาดูกันว่าเราจะเห็นข้อความนี้ชัดเจนทุกสีรึเปล่า


clc;
clear all;
close all;

% Random color 
rgb = rand(1,3);

% Create figure and set color
f = figure;
f.Color = rgb;

% Calculate tone color
darkness = 1-(0.299*rgb(1) + 0.587*rgb(2) + 0.114*rgb(3));
if(darkness>0.5)
    tc = [1 1 1];
else
    tc = [0 0 0];
end

% Insert text to figure
text(0.1,0.5,'HELLO MATLAB','fontsize',20,'fontweight','b',...
    'color',tc);
axis off;

จากในตัวอย่างโค้ดข้างบน จะสังเกตุเห็นว่าสมการที่ผมใช้เปลี่ยนไปนิดหน่อยนะครับ
1. จากตัว R ผมใช้ rgb(1) แทน นั่นเพราะว่า ในโหมดสี RGB ข้อมูลตัวแรกก็คือ Red นั่นเองครับ ส่วน G และ B ก็อยู่ลำดับที่ 2 และ 3
2. ในสมการไม่มี 255 หาร เพราะว่าค่าสีที่ใช้กำหนดให้ figure เป็นค่าสีที่อยู่ในรูปแบบ Normalize หรือก็คือถูกปรับสเกลให้มีค่าอยู่ระหว่าง 0-1 เท่านั้น (โดยเอา 255 ไปหารทั้งหมด ดังนั้นค่าสี 255 จึงมีค่าเท่ากับ 1 ในโหมด normalize) ดังนั้นเราจึงไม่จำเป็นต้องเอา 255 ไปหารอีก

ผลรัน
สังเกตุดูนะครับว่า หากสีพื้นหลังเป็นโทนมืด ตัวหนังสือก็จะเปลี่ยนเป็นสีขาว แต่หากสีพื้นหลังเป็นโทนสว่าง ตัวหนังสือก็จะเป็นสีดำ





ความเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การแก้สมการ Differential ด้วย MATLAB

ว่าด้วยเรื่องของ ERROR

การหาค่าเฉลี่ยโดยไม่ต้องเก็บค่า