วันอาทิตย์, กันยายน ๒๑, ๒๕๕๑

ปัญหา MATLAB

แตงเมล์ code MATLAB มาให้ ปัญหาคือ "เขียนภาพลงไฟล์แล้วมันมืด.. ไม่เหมือนกับที่โชว์ใน  Figure"

โค็ดมีดังนี้

...

figure(5)
subplot(1,2,1),imshow(img)
subplot(1,2,2),imshow(out)
imwrite(uint8(out),'aaa1.jpg')
%---------------------------------------------------------
...

figure(6)
subplot(2,2,1),imshow(img)
subplot(2,2,2),imshow(fmask1)
imwrite(uint8(fmask1),'aaa2filter.jpg')
subplot(2,2,3),imshow(mat2gray(real(out1)))
imwrite(uint8(out),'aaa2.jpg')
...
การแก้ปัญหา
1.  ระบุปัญหา -> ไฟล์ภาพที่ได้ไม่เหมือนกับที่โชว์(ที่ควรจะเป็น)
2. ระบตัวปัญหา -> คำสั่งที่ต้องดูคือ ตอนที่เรา เขียนไฟล์ภาพนั่นเอง ก็คือ บรรทัด
imwrite(uint8(out),'aaa2.jpg')

และ
imwrite(uint8(out),'aaa1.jpg')

3. ทางแก้ปัญหา -> ปัญหาคือ เขียน uint8(out) ลงไฟล์ แล้วมันไม่เหมือนกับ ใน Figure 

สมมติฐาน: เขียนโค๊ดให้มันแสดง กับ เขียนลงไฟล์เป็นข้อมูลต่างชุดกัน

พอลองตรวจดูโค๊ดด้านบน

subplot(1,2,2),imshow(out)

กับ
subplot(2,2,3),imshow(mat2gray(real(out1)))

ก็พบคำตอบ ว่า

ตอนพล๊อตลง Figure, ให้ MATLAB พล๊อต out กับ mat2gray(real(out1)) แต่ พอจะเขียนลงไฟล์ กลับให้มันเขียน uint8(out) ทั้งสองครั้ง

น่าเสียดายที่คอมพิวเตอร์ไม่มีไหวพริบพอที่จะแก้ตรงนี้ให้เรา ซึ่งก็เป็น trade-off กับความตรงไปตรงมา(คน-ซื่อสัตย์)

4. แก้ัปัญหาซะ -> เขียนโค๊ดใหม่ เป็นดังนี้

...

figure(5)
subplot(1,2,1),imshow(img)
subplot(1,2,2),imshow(out)
imwrite(out,'aaa1.jpg')
%---------------------------------------------------------
...

figure(6)
subplot(2,2,1),imshow(img)
subplot(2,2,2),imshow(fmask1)
imwrite(uint8(fmask1),'aaa2filter.jpg')
subplot(2,2,3),imshow(mat2gray(real(out1)))
imwrite(mat2gray(real(out1)),'aaa2.jpg')
...
นิทานเรื่องนี้สอนให้รู้ว่า

คอมพิวเตอร์ไม่ฉลาด และถ้าใช้อะไรที่ฉลาดมาแก้ปัญหาให้เรา ก็จะโดนโกง(ท่อนหลังไม่เกี่ยวกับ MATLAB)




ไม่มีความคิดเห็น: