ระบบสีใน MATLAB เป็นแบบ 8 bit image คือ มีค่าสีตั้งแต่ 0-255 (2^8=256) นั่นคือในแต่ละ pixel จะมีค่าประจำ pixel ของค่าสี RGB เมื่อภาพถูกเรียกเข้ามาใน MATLAB ให้อยู่ในรูปแบบของตัวเลขแล้ว เราสามารถดำเนินการด้านคณิตศาสตร์กับ matrix ของภาพนี้ได้ตามที่ต้องการทุกอย่างภายใต้เงื่อนไขไวยากรณ์ของ MATLAB อนุญาต การแสดงผลลัพธ์ก็คือ ภาพที่ได้รับการประมวลผลแล้ว หรืออาจเป็นข้อมูลที่แปลหรือถอดความหมายออกมาจากภาพนั้นๆ เพื่ออธิบายให้มนุษย์เราเข้าใจถึงภาพหรือคุณค่าบางประการของภาพนั้น เช่น การศึกษาการเคลื่อนที่ของมนุษย์ที่มีความ ปกติหรือบกพร่อง ทางกล้ามเนื้อและกระดูก การศึกษาการเคลื่อนที่ของเม็ดเลือดแดงในหลอดเลือด หรือการวัดความเร็วของวัตถุ face detection หรือ recognition (อันนี้มักเห็นในภาพยนต์เวลาตำรวจเอารูปถ่ายผู้ต้องสงสัยมาเทียบกับใบหน้าคนร้าย หรือการเปรียบเทียบลายนิ้วมือ) จากการถ่ายภาพ เป็นต้น เรามักได้ยินคำว่า image processing ไงครับ
ผมเป็นคนพื้นๆ ครับ ก็ต้องเริ่มจากพื้นฐานกันละครับ การประยุกต์ที่ยกตัวอย่างไว้ ก็รอไปก่อนหากมีโอกาสได้ศึกษา ลงมือทำเมื่อไร ผมจะนำมาเขียนไว้ แต่ตอนนี้ได้เวลา "Let's rock the RGB image"
เรายังต้องใช้ไฟล์ OpenImage.fig และ OpenImage.m จากหัวข้อที่แล้วแต่เพิ่มเติมส่วน radio button เพื่อเป็นตัวเลือกสำหรับเลือกแสดงรูปภาพแต่ละองค์ประกอบสี ดังนั้นสิ่งที่ต้องทำเพิ่มอีกส่วนหนึ่งก็คือเราต้องไปเพิ่ม source code เพื่อให้ โปรแกรมทำงานตามที่เราต้องการ
ในตัวอย่างนี้ radio button ที่สร้างขึ้นได้แก่
- RGB image เพื่อแสดงภาพสีต้นกำเนิด
- Red component ให้แสดงภาพเฉพาะองค์ประกอบ สีแดง
- Green component ให้แสดงภาพเฉพาะองค์ประกอบ สีเขียว
- Blue component ให้แสดงภาพเฉพาะองค์ประกอบ สีน้ำเงิน
- Gray scale image ให้แสดงภาพโทนสีเทา
สำหรับเทคนิคการแสดงภาพเฉพาะองค์ประกอบสีเดียว
สมมติ เก็บภาพสีไว้ในตัวแปรชื่อ RGBimage ถ้าต้องการแสดงภาพนี้เฉพาะสีแดง เราต้องกำหนดให้องค์ประกอบสีอื่นมีค่าเป็นศูนย์ (กำหนดเป็นสีดำ) เช่น
>>RGBimage=imread('test.jpg');
>>RGBimage(:,:,2)=0;
>>RGBimage(:,:,3)=0;
>>figure();imshow(RGBimage); title('Red-component image');
สิ่งที่ทำเพิ่มเติมคือ เลือก radio button ได้ทีละปุ่มเท่านั้นเพื่อให้โปรแกรมทำงานได้อย่างถูกต้อง ส่วนนี้ต้องเขียน function เพิ่มเติมนิดหน่อย แล้วค่อยเรียกมาใช้ ซึ่งผมตั้งชื่อว่า Turn_Off ฟังก์ชันนี้ต้องการ input ที่ชื่อว่า off ซึ่งจะบรรจุไปด้วย handles ที่ไม่ต้องการให้ทำงาน หรือปิดการทำงานนั่นเอง
ตัวอย่าง source code บางส่วนที่ต้องเพิ่มเติมเข้าไปครับ ไฟล์เต็มๆ download ได้ที่นี่ครับ OpenImage.fig, OpenImage.m, Turn_Off.m สำหรับฟังก์ชัน Turn_Off นั้นจะใส่ในไฟล์เดียวกับ OpenImage.m ก็ได้ แต่ในที่นี้เพื่อกันความสับสนเลยแยกออกมาอีกไฟล์ครับ
นี่เป็นรูปร่างหน้าตาโปรแกรมที่ทำงานได้ครับ ในภาพจะเห็นว่าจากภาพสีที่เราคุ้นเคยพอแยกให้แสดงเฉพาะสีเขียวก็แปลกตาดี นึกซะว่าตาบอดสี แดงและน้ำเงินแล้วกันครับ
% --- Executes on button press in RGBsignal.
function RGBsignal_Callback(hObject, eventdata, handles)
% hObject handle to RGBsignal (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes1); %ระบุว่าให้แสดงรูปใน axes ไหน
check=get(handles.RGBsignal,'value'); %รับค่าการถูกเลือก check=1 หรือไม่เลือก check=0
if (check==1)
imshow(handles.RGBimage);title('RGB image');
hpixinfo = impixelinfo;
axis off;
end
off=[handles.Redsignal handles.Greensignal handles.Bluesignal handles.Graysignal];
% ให้ radio button, RGB image เท่านั้นที่ทำงานได้
Turn_Off(off);%เรียกใช้ฟังก์ชัน Turn_Off
%guidata(hObject,handles);
% Hint: get(hObject,'Value') returns toggle state of RGBsignal
% --- Executes on button press in Redsignal.
function Redsignal_Callback(hObject, eventdata, handles)
% hObject handle to Redsignal (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
check=get(handles.Redsignal,'value');
axes(handles.axes1);
if (check==1)
if (get(handles.Redsignal,'value')==1)
handles.RGBimage(:,:,2) = 0;
handles.RGBimage(:,:,3) = 0;
imshow(handles.RGBimage); title('Red-component image');axis equal;axis tight;
axis off;impixelinfo;
end
end
off=[handles.Greensignal handles.Bluesignal handles.Graysignal handles.RGBsignal];
Turn_Off(off);
เข้าโหลดไฟล์ไม่ได้ค่ะ
ReplyDeleteแก้ไขให้แล้วครับ โหลดได้เลย
Deleteวิธีเปิดรูปภาพแสดงบน GUI อยู่ที่บทความไหนหรอคะ รบกวนพี่แปะลิ้งค์ให้ได้ไหมคะ
ReplyDelete