โค็ดมีดังนี้
...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)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น