Jump to content


ประกาศย้าย Thaiware Community ไปที่ QA.THAIWARE.COM

ขณะนี้ทางเว็บ Thaiware.com ได้เปิด บริการใหม่ภายใต้หัวข้อ THAIWARE Q&A (ถาม - ตอบ) เมื่อต้นเดือน มกราคม พ.ศ. 2556 (2013) ที่ผ่านมา หากใครมีข้อสงสัย มีคำถามต่างๆ จะสอบถาม เรามีทีมงานที่จะคอยดูแลตอบคำถาม ไขข้อข้องใจตลอดเวลา


สำหรับในหน้า COMMUNITY.THAIWARE.COM นี้เราจะเก็บเอาไว้เป็นคลังกระทู้เก่า เพื่อค้นคว้าหาความรู้ที่เคยพูดคุยกันมา ตลอด 10 ปีที่ผ่านมา ซึ่งต่อไปโดยจะไม่สามารถตั้งกระทู้ หรือ สมัครสมาชิกใหม่ ในหน้านี้ได้ ดังนั้นขอเชิญที่ QA.THAIWARE.COM แทน สำหรับสมาชิกเก่าในที่นี้ กรุณาสมัครสมาชิกใหม่อีกครั้งก่อนการใช้งานที่ THAIWARE Q&A (ถาม - ตอบ)


ขอบคุณที่ใช้บริการตลอดมา
ทีมงาน Thaiware.com
หากมีข้อสงสัยติดต่อ 0-2635-0455 ต่อ 4



Photo

matlab ครับ


  • Please log in to reply
11 replies to this topic

#1 Powerpikasai

Powerpikasai

    สมาชิกใหม่กั๊บ ;)

  • Members
  • Pip
  • 27 posts

Posted 14 March 2008 - 05:34 AM

pixels = double(cat(4,avi(1:2:end).cdata))/255;

pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f)));

Edited by Powerpikasai, 25 March 2008 - 03:40 AM.


#2 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 14 March 2008 - 11:39 PM

function d = tracking(video) %ฟังก์ชั่นนี้ชื่อ tracking มี input parameter ชื่อ video คืนค่าเป็นตัวแปรชื่อ d
if ischar(video) เช็คว่าค่าที่รับมาเป็นตัวอักษร ไม่ใช่ตัวเลข
avi = aviread(video); โหลดวีดิโอตามชื่อที่ใส่เข้ามาเก็บไปในตัวแปรชื่อ avi คือในปกติเนี่ยการโหลดภาพหรือวีดิโอใน MATLAB มันจะเก็บในรูป Matrix ว่าแต่ละ pixel มีระดับสี RGB เท่าไหร่
pixels = double(cat(4,avi(1:2:end).cdata))/255; อันนี้ไม่รู้จริง ๆ เข้าใจว่าเป็นการแปลงระดับสีที่อ่านได้ที่เก็บเป็น int ให้อยู่ในรูป Double
clear avi ลบตัวแปร avi
else
% Compile the pixel data into a single array
pixels = double(cat(4,video{1:2:end}))/255;
clear video
end

nFrames = size(pixels,4); หาว่าวีดิโอนี้มีกี่เฟรม คือตามที่บอกมาการโหลดภาพใน MATLAB จะเก็บอยู่ในรูป Matrix 3 มิติ(คือ พิกัด x y 2 มิติ และ Layer RGB อีก 1) วีดิโอเนี่ยมันเป็นภาพหลาย ๆ ภาพมาต่อกัน เลยเก็บอยู่ใน Matrix 4 มิติ มิติสุดท้ายบอก frame ที่เท่าไหร่ เลข 4 ในที่นี้ถามว่ามิติที่ 4 กว้างขนาดไหร
for f = 1:nFrames ก็วนตั้งแต่เฟรมแรกถึง nFrames ก็คือวนจนครบทุกเฟรม
pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f))); แปลงภาพแต่ละเฟรมเป็น gray scale
end

การแปลงเป็น gray scale เนี่ยจากที่ต้องเก็บเป็น Matrix 4 มิติ ก็ลดไป 1 มิติ เพราะระดับ R G และ B เท่ากันหมดเลยไม่ต้องมีมิติที่ 3

-------------------------------------------------------------------------
อ่าวเฮ้ยพิมพ์มามากกว่านี้หนิหว่าหายไปไหนฟะ
-------------------------------------------------------------------------

Edited by Miracle Maker, 15 March 2008 - 07:29 PM.


Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#3 Sarun101

Sarun101

     หล่อเลิศที่สุดในไทยแวร์ 

  • Gold Members
  • PipPipPipPipPipPip
  • 1,745 posts
  • Gender:Male
  • Location:หน้าคอมพิวเตอร์
  • Interests:   

Posted 15 March 2008 - 01:11 AM

เอาความเห็นผมนะ (ใช้ matlab ไม่เปน)
ไอ้เจ้า if ตัวแรกเนี่ย คือ
แปลงค่าสี ให้ อยู่ในรูปแบบเดียวกัน(input อาจเป็น char หรือเป็นอย่างอื่นก็ได้)
คือ
0x..อะไรก็ว่าไป(เลขฐาน 16 6หลัก)
เก็บไว้ในตัวแปรชนิด double (ซึ่งน่าจะเป็น array)
ผมลงความเห็นว่า char ในที่นี้ไม่ได้หมายถึงตัวอักษร
แต่หมายถึง ข้อมูลขนาด 1 byte
ซึ่งในภาษา c เขาก็เรียกว่า char

code นี้ผมไม่รู้หน้าที่ของ function ต่างๆ
แต่จากที่คุณ miracle maker กล่าวมามีจุดหนึ่งที่ผมไม่เข้าใจ
คือ ทำไมต้อง 4 มิติ
ถึงแม้ผมจะไม่เข้าใจ code แต่ผมรู้ว่า 3 มิติก็พอแล้ว
สมมุติมีภาพ 2*2 (ใส่สีด้วย)
มันก็ใช้เพียง array 2 มิติ
pic[0][0]=สี1;
pic[0][1]=สี2;
pic[1][0]=สี3;
pic[1][1]=สี4;
(เป็น frame ก็เพิ่มมาอีก 1 มิติ)
ซึ่งค่าสีถึงจะ 3 สี rgb ก็เก็บอยู่ในตัวแปรเดียวกันได้(แต่ตัวแปรขนาดอย่างน้อย 3 bytes(คิดว่า double น่าจะมากกว่า 3 bytes))
พอ convert เป็นขาว-ดำ มันก็เก็บแค่ระดับสี(ใช้ตัวแปร byte เดียวพอ(ซึ่งก็น่าจะเป็น ชนิด char)) เพราะ rgb เท่ากันหมด

สรุปแล้ว คำถามคือ
มิติที่ 4 มาทำอะไรคับ

มีอีกจุดหนึ่งที่ข้องใจครับ
บรรทัดนี้
function d = tracking(video)
ถ้า d เป็นตัวแปร
เหตุใดต้องมีคำว่า function ตามหน้า
มันเหมือนประกาศ function ชื่อ d โดยใช้ความสามารถบางส่วนของ function tracking รึเปล่า
เพราะจากที่ผมสังเกตได้คือ ข้างล่างมีการเรียกใช้ function d
(หรือไม่ใช่หว่า มัน d แล้วเป็น วงเล็บเหมือนส่ง parameter)

หลังจากแปลงเป็น grayscale แล้ว คาดว่า นำภาพที่ได้แต่ละ frame ไปประมวลผลต่อ
(พอมันเป็น grayscale แล้วทีนี้เลย เปรียบเทียบระดับสีได้ง่าย)
โดยเปรียบเทียบ frame ที่อยู่ติดกัน ไปเรื่อยๆ แล้วหาว่าวัตถุไหนเคลื่อนที่(มั้ง)

อันนี้ คุณ จขกท. ก็ต้องพิจารณาดู แต่ให้เน้นของคุณ miracle เป็นหลัก
เอาคนใช้ matlab คล่อง
กับคนไม่เคยเห็น matlab มาอธิบาย
มันก็แทบไม่ต้องคิดเลย ว่าจะรับข้อมูลจากคนไหน




    

Edited by Sarun101, 15 March 2008 - 01:31 AM.

<div style="width:540px; height:150px; overflow:auto; border-style:dashed; border-width:2px; border-color:#9FB9D4; margin-left:auto; margin-right:auto; margin-bottom:4px;"><table width="400" border="0" cellspacing="0" cellpadding="0"><tr><td width="60%"><span style="font-size:8pt;line-height:100%">     แสวงหาความมั่งคั่งอันยิ่งใหญ่
แสวงหาความรู้ไปก็เพียง
แสวงหาความจริงกลับมาคิด
ทุกสิ่งที่ตัวเราล้วนหามา </span></td><td width="40%"><span style="font-size:8pt;line-height:100%">เพื่อนำไปกู้ชอบกอบชื่อเสียง
เพื่อนำไปเรียบเรียงเป็นตำรา
มันจับจิตใจเราจนหนักหนา
เพื่อสนองตัณหาอันนิรันดิ์</span></td></tr></table><table width="400" border="0" cellspacing="0" cellpadding="0"><tr><td width="60%"><span style="font-size:8pt;line-height:100%">     อันความอิสระเสรี
ท่องเที่ยวในโลกหล้าแสนกว้างไกล
ตัวเราอยู่โดดเดี่ยวมาเนิ่นนาน
พบมามากกระแสน้ำที่ไหลริน </span></td><td width="40%"><span style="font-size:8pt;line-height:100%">มีอะไรเป็นภาระก็หาไม่
ทั่วฟากฟ้าสุราลัยจบแดนดิน
เหยียบย่างก้าวผ่านหลายโขดหิน
ทั้งผืนดินยังไม่สบเพื่อนคู่กาย</span></td></tr></table><table width="500" border="0" cellspacing="0" cellpadding="0"><tr><td><span style="font-size:8pt;line-height:100%"><span style="color:#F5F9FD"></span>ใต้ท้องฟ้าแห่งโลกนี้ จะมีหญิงงามใด เหมาะสมจะอยู่เคียงข้างผมจนวันตายหรือไม่ เขาคนนั้นจะอยู่ที่ประเทศใดในตอนนี้ เขาจะพูดด้วยภาษาอะไร สักวันหนึ่งผมหวังที่จะได้พบเจอ เธอผู้เท่าเทียมกับผม ไม่สูงส่ง ไม่ต่ำต้อย ไปกว่าผม ผู้ครอบครองสิ่งที่ตัวผมต้องการ ผู้ที่ต้องการสิ่งที่ผมครอบครอง ผมรอคอยมานานวัน จะรอต่อจนถึงวันที่ได้พบเจอ</span></td></tr></table><table width="500" border="0" cellspacing="0" cellpadding="0"><tr><td><span style="font-size:8pt;line-height:100%">เหนือผืนดินแห่งโลกนี้ จะมีมิตรสหายผู้ปราดเปรื่องท่านใด ยอมคบหาผมเป็นสหายผู้รู้ใจหรือไม่ ผมยังรอคอย สหายผู้จริงใจ ก้าวเข้าหาตัวผมคนนี้ สหายผู้นี้จะอยู่ส่วนใดของกาลเวลา อีกนานเท่าใดจึงได้พบพาน ฤๅต้องรอจนวันตาย</span></td></tr></table><table width="500" border="0" cellspacing="0" cellpadding="0"><tr><td><span style="font-size:8pt;line-height:100%">ผมเป็นคนที่ไม่ปกติและไม่ธรรมดา ผมมีอายุขัยยืนยาวกว่าใครๆ แต่ก็ต้องแลกมาด้วยสิ่งตอบแทนแสนสาหัส ไม่มีใครคู่ควรและต้องการจะอยู่เคียงข้างผม ไม่มีใครเหมาะสมกับผม ผมอาจจะเป็นเพียงหนึ่งเดียวในโลก แม้กาลเวลาจะยาวนานหรือชีวิตจะแสนสั้นสักเพียงใด แต่ลึกๆในใจผมจะไม่หวาดหวั่น</span></td></tr></table></div><div style="display:none;">
<!--note-->
<!-- img src="http://www.sigbattle...php?sigID=1005" alt="" /--></div>

ผมรับงานอิสระด้วยนะครับ คุยก่อนได้ sarun101|at|wolverines|dot|com


#4 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 15 March 2008 - 07:21 PM

@Sarun101

คืองี้ครับการโหลดภาพ(ไม่ใช่วีดิโอนะ) ของ Matlab เนี่ยสมมุติภาพมี 4 pixel เรียงกัน เป็นแบบ RGB นะ

แดง เขียว น้ำเงิน ขาว

เวลาเรียกใช้

CODE
picture1 = imread('myPic.bmp')


เวลาโหลดเข้ามาจะมี 3 ชั้น
picture1[:,:,1] = 255 0 0 255 ชั้นนี้เป็นค่า R
picture1[:,:,2] = 0 255 0 255 ชั้นนี้เป็นค่า G
picture1[:,:,3] = 0 0 255 255 ชั้นนี้เป็นค่า B

เมื่อมาเทียบกะเลขฐาน 16
พิกเซลแรกก็จะเป็นสี #FF0000 เป็นสีแดง
พิกเซลสองก็จะเป็นสี #00FF00 เป็นสีเขียว
พิกเซลสามก็จะเป็นสี #0000FF เป็นสีน้ำเงิน
พิกเซลสี่ก็จะเป็นสี #FFFFFF เป็นสีขาว

แต่สำหรับภาพ Gray Scale ค่า R G B มันเท่ากันหมด(#888888 #EFEFEF)

เลยไม่จำเป็นต้องมีชั้น R G B ก็จะเป็นแบบที่คุณบอกคือ พิกเซล[0][0] = 128 คือพิกเซลนี้มี Gray Level = 128

การโหลดวีดิโอก็คล้าย ๆ การโหลดภาพแต่เป็นภาพหลาย ๆ ภาพต่อกันเลยต้องเพิ่มไปอีกหนึ่งมิติ

ส่วนอันที่สองที่ว่า
function d = tracking(video) เนี่ย โครงสร้างการประกาศ Function มันเป็นอย่างงี้ครับ

funciton ตัวแปรที่ต้องการจะคืนค่า = ชื่อฟังก์ชั่น(พารามิเตอร์)

เช่น

CODE
function b = square(a)
b = a.*a;


ฟังก์ชั่นนี้ชื่อว่า square รับค่า a คืนค่า b เวลาเรียกใช้

CODE
result = square(10)


มันก็จะไปเรียกใช้ฟังก์ชั่นข้างบน a = 10
b = 10*10 = 100
คืนค่ามาเป็น 100
ผลที่ออกมาคือ result = 100

คือว่าไอ้ MATLAB เนี่ยมันไม่มีคำสั่ง return หน่ะครับ

Edited by Miracle Maker, 15 March 2008 - 07:27 PM.


Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#5 Powerpikasai

Powerpikasai

    สมาชิกใหม่กั๊บ ;)

  • Members
  • Pip
  • 27 posts

Posted 20 March 2008 - 07:29 PM

ขอบคุณทุกท่านๆ มากเลยครบได้ ความรู้เยอะมากๆเลยครับ

pixels = double(cat(4,avi(1:2:end).cdata))/255; ยังงงอันนี้อยู่เลยครับเนีย้

หาข้อมูลไม่ได้สักที

Edited by Powerpikasai, 20 March 2008 - 07:31 PM.


#6 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 21 March 2008 - 01:46 AM

อ่าโทษที่ที่ไม่ได้มาตอบต่อครับพอดีช่วงนี้ยุ่ง ๆ อยู่ผมลองดูแล้ว
ในการสั่ง
CODE
aviread()

ผลที่ได้จะเป็น
CODE
1x80 struct array with fields:
    cdata
    colormap

แปลว่าผลจาก aviread จะเก็บอยู่ในสอง attribute คือ cdata และ colormap
cdata เนี่ยเป็นตัวที่บอกว่า ณ เฟรมนี้ พิกเซลดังกล่าวมีค่า R G B เท่าไหร่
ส่วน colormap นี่ไม่มั่นใจ
เพราะฉะนั้นสิ่งที่เราต้องการเอามาผ่านกระบวนการคือค่าสีของแต่ละพิกเซลนั่นคือ cdata

CODE
avi(1:2:end).cdata

ตัวนี้คือเลือกเอา cdata ของเฟรมที่ 1 เพิ่มทีละ 2 ไปจนจบมาคิด คือเราไม่ได้สนใจทุก ๆ เฟรมแต่อ่านแค่เฟรมที่ 1 3 5 7 9 ... เฟรมสุดท้าย(เดาว่าเพื่อลดภาระในการคำนวน)

CODE
double(cat(4,avi(1:2:end).cdata))/255

ส่วน cat เนี่ยผมยังไม่มั่นใจนะตัวคำสั่งมันเองอ่ะเอาไว้สำหรับต่อ Matrix 2 หรือมากกว่าเข้าด้วยกันแต่ในที่นี้มันมีแค่ Matrix เดียวเหมือนกับว่าเป็นการดึงค่า cdata มาใช้เลย

และ double(...) ก็แปลงค่าที่อ่านได้(ซึ่งเป็น uint8 หรือ unsign integer 8 bit) เป็นดับเบิ้ลเวลาหารจะได้มีทศนิยม

/255 น่าจะทำเพื่อเป็นการ Normalization เฉย ๆ ถ้าไม่แปลงเป็นดับเบิ้ลหาร 255 ผลลัพธ์จะกลายเป็น 0 หมด

Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#7 Powerpikasai

Powerpikasai

    สมาชิกใหม่กั๊บ ;)

  • Members
  • Pip
  • 27 posts

Posted 21 March 2008 - 12:11 PM

พี่ครับ จะตอบแบบนี้ได้ไหม คือ .cdata กับ color ยังเอามาใช้ในการ ลบ ไม่ได้จึงต้องแปลงเป็น double ก่อน โดยเราสร้าง matrix ที่ 4 ขึ้นมาใหม่เพื่อ ลดภาระ ในการคำนวณ โดย เก็บเฟรม ที่ 1 3 5 7 9 ขึ้นมาใหม่ โดยเก็บไว้ใน matrix ที่ 4 แล้ว 255 เนี้ย เหมือนกับ ให้เก็บค่า สูง
สุดได้ 255 หรือ เปล่าครับ
แบบ r 255

g 255

b 255

4 255


สรุปแล้วก็ยังนึกไม่ออกอยู่ดีเลยครับ




pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f))); อันนี้ก็ยังงงอยู่นิดครับ ว่าทำไม มิติที่4 ถึงย้ายมามิติที่ 3 ได้ แล้วปกติ :,:,: อย่างเนี้ยมันหมายถึงอะไรเหรอครับ

ทั้ง :,:,1 r :,:,2 g :,:,3 b ปกติคือ แต่ละmatrix เก็บค่าสีแยกกัน

แต่ :,:,F แบบนี้คือเอาตัวแปรมาใส่ได้เลยมันหมายความอย่างไรหรือครับ เกี่ยวข้องอะไรกับ RGB ไหมครับ ใช่ row:colum:matrixที่f หรือเปล่าครับ
รบกวนพี่อีกครั้งครับ

Attached Files

  • Attached File  cat.rtf   4.52K   3 downloads

Edited by Powerpikasai, 21 March 2008 - 12:32 PM.


#8 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 22 March 2008 - 02:23 AM

อ่าเอาอันแรกก่อนผมไม่รู้ว่าเราเข้าใจตรงกันรึเปล่านะคืองี้
สมมุติไฟล์วีดีโอเรามี่ขนาด 2 x 2 pixel และมี 3 เฟรม นะ
เราสั่ง

CODE
avi = aviread(video);


สิ่งได้ได้มาตอนนี้ avi เราจะมีข้อมูลแบ่งเป็นสองส่วนคือ cdata กับ colormap

ถ้าผมอยากรู้ว่าจุดที่ (1, 2) ของเฟรมที่ 3 มีสีอะไร

CODE
avi(3).cdata(1, 2, :)


ใน MATLAB ตัว : หมายความว่าเลือกทุกตัวนะ ในที่นี้ก็จะได้ Array ขนาดสามช่องมา

เห็นไหมครับว่ามันยุ่งยากมากและตัว colormap เราก็ไม่ได้เอามาใช้เปลืองเมมโมรี่อีก

เขาเลยสร้างตัวแปรชื่อ pixel มาเก็บค่าสีโดยเฉพาะแล้วเคลียร์ค่า avi ทิ้ง โดยคำสั่ง

CODE
pixels = double(cat(4,avi.cdata))


ผมเอาตัว(1:2:end) ออกไปที่นี้เราก็แมพค่าสีมาทุกเฟรมนะ จำไว้ว่าค่าสีคือค่า cdata

เพื่อเอาเฉพาะค่าสีมาเก็บไว้ ทีนี้ถ้าเราอยากรู้อย่างเดิมก็แค่สั่งว่า

CODE
pixel(1, 2, :, 3)


ตัวแปรสองตัวแรกคือพิกัด xy ตามด้วยสีอะไร RG หรือ B และตัวสุดท้ายคือเฟรมที่เท่าไหร่

Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#9 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 22 March 2008 - 02:39 AM

มาคำถามที่สอง

rgb2gray คำสั่งมันคือการแปลงภาพ rgb มาเป็น grayscale

ตัวอย่างจากข้างบน วีดิโอ 2x2 พิกเซล 4 เฟรม

ถ้าเป็นวีดิโอ RGB สมมุติพิกเซลแรกของเฟรมแรกเป็นสี #FF8800(เข้าใจโค้ดสีอย่างงี้ไหมครับ ไม่เข้าใจถามได้นะ)

แปลว่าอะไร แปลว่า R=255 G=128 B=0 ใช่มะ

เวลาเก็บใน Matrix เราต้องระบุว่า

CODE
pixel(1,1,1,1)=255;
pixel(1,1,2,1)=128;
pixel(1,1,3,1)=0;


แต่ทีนี้ถ้าลองไปเปิดดูโค้ดของสีเทา(ใน Photoshop หรือ paint ก็ดูได้)
สีเท่ามีค่า R G และ B เท่ากันเสมอเช่น #888888 #323232 #EFEFEF พวกนี้เป็นสีเทาหมด

สมมุติพิกเซลแรกเฟรมแรกเป็นสี #888888 เราก็จะระบุได้ว่า

CODE
pixel(1,1,1,1)=128;
pixel(1,1,2,1)=128;
pixel(1,1,3,1)=128;


เห็นอะไรไหมครับโค้ดสีมันซ้ำซ้อนกันถ้าคุณรู้ว่า pixel(1,2,2,1)=100 ซึ่งเป็นค่า G แล้วคุณบอกได้ไหมว่า pixel(1,2,3,1) ซึ่งเป็นค่า B ของพิกเซลเดียวกันมีค่าเท่ากับเท่าไหร่ ก็ต้องตอบได้ทันทีว่ามันคือ 100 ใช่มะเพราะมันต้องเท่ากัน

ทีนี้แทนที่ต้องระบุอย่างซ้ำซ้อนขนาดนั้นแค่เราบอกว่า

CODE
pixel(x, y, เฟรมที่เท่าไหร่) = gray level


แค่นี้ก็พอแล้ว มิติมันก็ลดไปหนึ่งมิติเพราะเราไม่ต้องแยกว่า R G B มันมีค่าเท่าไหร่ เพราะมันเท่ากัน

ลองไปดูเพิ่มเติมได้ว่าภาพ bitmap ในโหมด gray scale จะเรียกว่า bitmap 8 bit ส่วนภาพ bitmap ที่เป็น RGB จะเรียกว่าภาพ bitmap 24 bit จะเห็นได้ว่า RGB จุมากกว่า gray scale สามเท่า(จริงเฉพาะ bitmap นะเพราะมันเป็นภาพแบบ uncompress)

CODE
for f = 1:nFrames
pixel(:,:,f) = (rgb2gray(pixels(:,:,:,f)));
end


โค้ดบรรทัดนี้สังเกตดี ๆ มันอยู่ใน for loop โดยค่า f จะเริ่มจาก 1 เพิ่มขึ้นเรื่อย ๆ จนถึง nFrames ในที่นี้ nFrames คือเฟรมทั้งหมดที่แมพมาตามที่อธิบายข้างบน จุดประสงค์ของการทำอย่างนี้คือให้ f บอกว่าขณะนี้เราอยู่เฟรมที่เท่าไหร่

f=1 แปลงเฟรมแรกจาก RGB เป็น gray scale

พอแปลงเสร็จ f=2 เปลี่ยนค่าเราก็ไปทำเฟรมที่สองต่อวนไปเรื่อย ๆ จนจบ

Edited by Miracle Maker, 22 March 2008 - 02:45 AM.


Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#10 Powerpikasai

Powerpikasai

    สมาชิกใหม่กั๊บ ;)

  • Members
  • Pip
  • 27 posts

Posted 22 March 2008 - 06:27 AM

ขอบคุณพี่มากเลยครับมาตอบซะดึกดื่นเลยได้ความรู้ในส่วนที่ไม่เข้าใจแล้วครับ เดี๋ยวมีคำถามจะมาถามอีกครับ นี่ผมก็นั่งงมตั้งแต่บ่ายอยู่ครับ ว่า จะเอารูปมาอธิบายยังไงให้คนอื่นเข้าใจดี


ปล.ขอบคุณมากครับๆ

#11 Miracle Maker

Miracle Maker

    รอต่อไป... ต้องรอจนถึงเมื่อไหร่

  • Exclusive Members
  • PipPipPipPipPipPipPip
  • 3,383 posts
  • Gender:Male
  • Location:Offenburg, Germany

Posted 22 March 2008 - 11:21 PM

เรืองเวลาที่มาตอบไม่ต้องตกใจไปครับผมอยู่เยอรมันเวลามันช้ากว่าไทย 6 ชั่วโมง ผมมาตอบส่วนมากก็จะเป็นเวลากลางคืนตามเวลาบอร์ด

Miracle Maker's RMXP Project's Progress
ระบบ 50%
animation 20%
เนื้อเรื่อง 0%
ตาคอยมองจ้องอยู่อยากให้รู้ใจกัน แต่แล้วเธอยังมองผ่านและฉันก็ยังหวั่นไหว

#12 Powerpikasai

Powerpikasai

    สมาชิกใหม่กั๊บ ;)

  • Members
  • Pip
  • 27 posts

Posted 23 March 2008 - 01:16 AM

โหย นักเรียนนอกด้วยๆ มีคำถามมาอีกแล้ว ว่า ทำไมต้อง double ด้วยเหรอครับ

แล้ว/255 มันคืออะไรไม่มีได้ไหมครับ คือผมต้องคิดในความเป็นไปได้ทุกกรณีที่จะโดนถามอ่ะครับ ขอบคุณนะครับ มาตอบทุกวันเลย


สงสัยอีกอันครับ รูปมันเก็บแบบนี้เปล่าครับ x 1มิติ y หนึ่งมิติ แล้วก็ rgb 1 มิติ

เข้าใจแบบนี้ถูกไหมครับ ตอนแรกนึกว่า r g b คนละมิติเลย




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

ประกาศ ! : ข้อความที่ถูกพิมพ์ หรือเผยแพร่ออกจากเว็บบอร์ด Thaiware Community Board แห่งนี้ ถือเป็น ความคิดเห็นส่วนบุคคลทั้งสิ้น ซึ่งทางเว็บไซต์ Thaiware.com จะ ไม่รับผิดชอบ ต่อสิ่งที่เกิดขึ้น อันเป็นเหตุมาจากการพิมพ์จากทางผู้ใช้ และสมาชิก แต่อย่างไรก็ตามถ้าหาก ท่านใดพบ ข้อความที่เป็นสิ่งที่ไม่เหมาะสม ได้ถูกเผยแพร่ลงในเว็บไซต์ อาทิเช่น คำพูดที่ลบหลู่ ดูหมิ่นต่อ ความมั่นคงของชาติ ศาสนา และ พระมหากษัตริย์ รวมไปถึงการเผยแพร่รูปภาพที่ไม่เหมาะสม หรือ สิ่งผิดกฏหมายต่างๆ กรุณาแจ้ง ทางทีมงาน มาได้ที่ webmaster@thaiware.com หรือ โทรศัพท์มาแจ้งได้ที่ 0-2635-0744 (ทุกวัน จันทร์ - ศุกร์ เวลา 9.30 - 17.30 น.) ซึ่งเราจะรีบดำเนินการลบโดยเร็วที่สุด ...