แสดงบทความที่มีป้ายกำกับ MATLAB แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ MATLAB แสดงบทความทั้งหมด

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

ปัญหา 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)




วันพฤหัสบดี, กันยายน ๑๘, ๒๕๕๑

Comment หลายบรรทัด ใน MATLAB

Comment ใน MATLAB ใช้

%
Comment หลายบรรทัด ใน MATLAB

ทำอย่างนี้

เปิด Comment

%{

ปิด Comment

%}

ตัวอย่าง

proper_img = imresize(proper_acpect_img,[256, 256]); %scale to 256 by 256
%imshow(proper_img);
%% Averaging Filter
%{
img = proper_img;
%Step 2: Calling an averaging filter
mask = fspecial('average', 3); %filter mask size 3 by 3 pixel 
...
pause
close all
%}