1) พัฒนาโปรแกรมการแปลงค่าจุดภาพในรูปแบบ RGB เป็นรูปแบบ HSI function RGBtoHIS RGB = 0; n = 0; i = 0; minimum = ...
1) พัฒนาโปรแกรมการแปลงค่าจุดภาพในรูปแบบ RGB เป็นรูปแบบ HSI
2) กรองภาพข้างล่าง (ตาม ใบงาน workshop) ด้วยตัวกรอง 4 แบบ พร้อมแสดงผลของภาพที่เกิดขึ้นในรูปแบบของเมตริกซ์
โค๊ด
3) โหลดภาพจากไฟล์ mandrill.mat ด้วยคำสั่ง load('mandrill.mat'); m=im2uint8(ind2gray(X,map));
จากนั้นให้ลองใช้ตัวกรองเฉลี่ยหลายๆ ขนาดเพื่อกระทำกับภาพแล้วสรุปว่าขนาดของตัวกรองที่เล็กที่สุดที่ทำให้หนวดหายไปคือเท่าใด
โค๊ด
ตรงที่เปลี่ยนคือ
ให้เปลี่ยนขนาดตัวกรอง จาก [3,3] เป็นขนาดอื่นดูนะครับ
ผมลองดูแล้วมันจะอยู่ที่ขนาด [24,24]
4) เหมือนข้อ 3 แต่ให้ลองใช้ตัวกรองเกาส์เซียนดังนี้
ขนาด 3x3 ค่าเบี่ยงเบนมาตรฐาน 0.5, 1, 2
ขนาด 7x7 ค่าเบี่ยงเบนมาตรฐาน 1, 3, 6
ขนาด 11x11 ค่าเบี่ยงเบนมาตรฐาน 1, 4, 8
ขนาด 21x21 ค่าเบี่ยงเบนมาตรฐาน 1, 5, 10
โค๊ด
ผลที่ได้ น่าจะเป็นตัวกรองขนาด 21x21 ค่าเบี่ยงเบนมาตรฐาน 10
5) อธิบายว่าจะเกิดอะไรขึ้นเมื่อใช้คำสั่ง imshow(imsubtract(cmax,cmin)) โดยให้ cmax เป็นผลของการใช้ max fillter และให้ cmin เป็นผลของการใช้ minfilter
ข้อนี้เหมือนกับ อ. ไม่ได้สอนนะครับ ต้องดูจากไฟล์ที่หนังสือที่ รังสรรค์ ให้
โค๊ด
ภาพผลลัพธ์ที่ได้ จะได้เส้นขอบรูปที่สว่าง
ลองเช็คดูทุกข้อนะครับ
function RGBtoHIS
RGB = 0;
n = 0;
i = 0;
minimum = 0;
s = 0;
h = 0;
diff = 0;
for n=1 : 3
RGB(n) = input('Enter color RGB : ');
end
i = max(RGB);
minimum = min(RGB);
disp(i)
disp(minimum)
if (i > 0)
s = (i - minimum)/i;
else
s = 0;
end
if ( s > 0 )
h = -1;
diff = i - minimum;
end
if ( RGB(1) == i )
h = (3.14/3)* ((RGB(2) - RGB(3))/diff) ;
elseif RGB(2) == i
h = ((2*3.14))/3+((3.14/3)*((RGB(1)-RGB(2))/diff));
elseif RGB(3) == i
h = ((4*3.14))/3+((3.14/3)*((RGB(1)-RGB(2))/diff));
end
if h < 0
h = h + 2*3.14;
end
fprintf('Value of H is %.2f',h);
fprintf('\nValue of S is %.2f',s);
fprintf('\nValue of I is %.2f',i);
end
2) กรองภาพข้างล่าง (ตาม ใบงาน workshop) ด้วยตัวกรอง 4 แบบ พร้อมแสดงผลของภาพที่เกิดขึ้นในรูปแบบของเมตริกซ์
โค๊ด
>> p=[20 20 20 10 10 10 10 10 10;
20 20 20 20 20 20 20 20 10;
20 20 20 10 10 10 10 20 10;
20 20 10 10 10 10 10 20 10;
20 10 10 10 10 10 10 20 10;
10 10 10 10 20 10 10 20 10;
10 10 10 10 10 10 10 10 10;
20 10 20 20 10 10 10 20 20;
20 10 10 20 10 10 20 10 20];
>> f1=[-1 -1 0; -1 0 1; 0 1 1];
>> f2=[0 -1 -1; 1 0 -1; 1 1 0];
>> f3=[-1 -1 -1; 2 2 2; -1 -1 -1];
>> f4=[1 1 1; 1 1 1; 1 1 1];
>> pf1=filter2(f1,p,'same')
>> pf2=filter2(f2,p,'same')
>> pf3=filter2(f3,p,'same')
>> pf4=filter2(f4,p,'same')
3) โหลดภาพจากไฟล์ mandrill.mat ด้วยคำสั่ง load('mandrill.mat'); m=im2uint8(ind2gray(X,map));
จากนั้นให้ลองใช้ตัวกรองเฉลี่ยหลายๆ ขนาดเพื่อกระทำกับภาพแล้วสรุปว่าขนาดของตัวกรองที่เล็กที่สุดที่ทำให้หนวดหายไปคือเท่าใด
โค๊ด
>>load('mandrill.mat'); m=im2uint8(ind2gray(X,map));
>>f1=fspecial('average',[3,3]);
>>mf1=filter2(f1,m);
>>mf1=uint8(mf1);
>>figure, imshow(mf1)
ตรงที่เปลี่ยนคือ
>>f1=fspecial('average',[3,3]);
ให้เปลี่ยนขนาดตัวกรอง จาก [3,3] เป็นขนาดอื่นดูนะครับ
ผมลองดูแล้วมันจะอยู่ที่ขนาด [24,24]
4) เหมือนข้อ 3 แต่ให้ลองใช้ตัวกรองเกาส์เซียนดังนี้
ขนาด 3x3 ค่าเบี่ยงเบนมาตรฐาน 0.5, 1, 2
ขนาด 7x7 ค่าเบี่ยงเบนมาตรฐาน 1, 3, 6
ขนาด 11x11 ค่าเบี่ยงเบนมาตรฐาน 1, 4, 8
ขนาด 21x21 ค่าเบี่ยงเบนมาตรฐาน 1, 5, 10
โค๊ด
>> load('mandrill.mat'); m=im2uint8(ind2gray(X,map));
>> g1=fspecial('gaussian',[3,3]);
>> g2=fspecial('gaussian',[3,3],1);
>> g3=fspecial('gaussian',[3,3],2);
>> figure, fg1=filter2(g1,m); fg1=uint8(fg1);imshow(fg1);
>> figure, fg2=filter2(g2,m); fg2=uint8(fg2);imshow(fg2);
>> figure, fg3=filter2(g3,m); fg3=uint8(fg3);imshow(fg3);
>> g4=fspecial('gaussian',[7,7],1);
>> g5=fspecial('gaussian',[7,7],3);
>> g6=fspecial('gaussian',[7,7],6);
>> figure, fg4=filter2(g4,m); fg4=uint8(fg4);imshow(fg4);
>> figure, fg5=filter2(g5,m); fg5=uint8(fg5);imshow(fg5);
>> figure, fg6=filter2(g6,m); fg6=uint8(fg6);imshow(fg6);
>> g7=fspecial('gaussian',[11,11],1);
>> g8=fspecial('gaussian',[11,11],4);
>> g9=fspecial('gaussian',[11,11],8);
>> figure, fg7=filter2(g7,m); fg7=uint8(fg7);imshow(fg7);
>> figure, fg8=filter2(g8,m); fg8=uint8(fg8);imshow(fg8);
>> figure, fg9=filter2(g9,m); fg9=uint8(fg9);imshow(fg9);
>> g10=fspecial('gaussian',[21,21],1);
>> g11=fspecial('gaussian',[21,21],5);
>> g12=fspecial('gaussian',[21,21],10);
>> figure, fg10=filter2(g10,m); fg10=uint8(fg10);imshow(fg10);
>> figure, fg11=filter2(g11,m); fg11=uint8(fg11);imshow(fg11);
>> figure, fg12=filter2(g12,m); fg12=uint8(fg12);imshow(fg12);
ผลที่ได้ น่าจะเป็นตัวกรองขนาด 21x21 ค่าเบี่ยงเบนมาตรฐาน 10
5) อธิบายว่าจะเกิดอะไรขึ้นเมื่อใช้คำสั่ง imshow(imsubtract(cmax,cmin)) โดยให้ cmax เป็นผลของการใช้ max fillter และให้ cmin เป็นผลของการใช้ minfilter
ข้อนี้เหมือนกับ อ. ไม่ได้สอนนะครับ ต้องดูจากไฟล์ที่หนังสือที่ รังสรรค์ ให้
โค๊ด
>> c=imread('cameraman.tif');
>> cmax=ordfilt2(c,9,ones(3,3));
>> cmin=ordfilt2(c,1,ones(3,3));
>> imshow(imsubtract(cmax,cmin))
ภาพผลลัพธ์ที่ได้ จะได้เส้นขอบรูปที่สว่าง
ลองเช็คดูทุกข้อนะครับ
แหมๆ มีเวลาทำ image เน้อ อย่าลืมเปิดเมลล์ดูงานด้วยนะเพ่
ตอบลบก็ช่วยทำให้ จะได้มีเวลาทำ SA กัน
ตอบลบอัปเดต Work Shop 4 ครับ ลองเก็บไว้ดูเป็นตัวอย่าง...
ตอบลบ