BÀITẬPXỬLÝẢNHSỐ
1) Lọcảnh(sửdụngphéptươngquan)trênmiềnkhônggian
filtered=spatial_filter(image,mask)
Trongđóimagelàảnhxámcầnlọc,masklàmặtnạlọc(kíchthướcmỗichiềulàsốlẻ),
filteredlàảnhsaukhilọc.
Bàilàm:
functionloc_anh=spatial_filter(image,mask)
clc;closeall;
[row_image,colum_image]=size(image);
[row_mask,colum_mask]=size(mask);
fori=1:row_image+2*floor(row_mask/2)
forj=1:colum_image+2*floor(colum_mask/2)
loc_anh(i,j)=0;
end
end
fori=1:row_image
forj=1:colum_image
loc_anh(i+floor(row_mask/2),j+floor(colum_mask/2))=image(i,j);
end
end
fori=1:row_image
forj=1:colum_image
bientam=0;
foru=1:row_mask
forv=1:colum_mask
bientam=bientam+loc_anh(ifloor(row_mask/2)+u,
jfloor(colum_mask/2)+v)*mask(u,v);
end
end
image(i,j)=bientam;
end
end
loc_anh=image;
end
Thaotác:(tacómatrậnAlàảnhvàmlàmặtnạlọctùyý)
>> A=[1 2 3 4 ; 5 6 7 8 ; 9 0 1 2 ] A = 1 2 3 4
5 6 7 8
9 0 1 2
>> m = [0 1 0 ; 1 1 1 ; 0 1 0] m = 0 1 0
1 -4 1
0 1 0
>> loc_anh = spatial_filter(A,m) loc_anh = 3 2 1 -5
-4 -10 -10 -19
-31 16 5 1
2) LọcmộtảnhbấtkỳbằnghàmđãviếtvàsosánhvớikếtquảlọcbằnghàmhỗtrợbởiMatlab(ví
dụfspecial,imfilter,…).
Bàilàm:CũngvớimatrậnA(ảnhA)tasửdụngvớihàmhỗtrợthìkếtquảvẫnkothayđổi.
Nhưngviệcsửdụngcáchàmcósẵnsẽgiúptagiảmthờigianchoviệcviếthàmnhưởcâu1.Ví
dụ:tasửdụngfspecial,imfilter,tacó:
>>A=[1234;5678;9012] A= 1234
5678
9012
>>m=fspecial('laplacian',0) m= 010
141
010
>>imfilter(A,m) ans=3215
4101019
311651
3) Thựchiệnlọctrungvị,lọcmin,lọcmax,lọcmidpointchomộtảnhxámvớimặtnạlọccókích
thướcnnbấtkỳ(nlẻvàn>1).
Bàilàm:chọnn=3
function[locmax,locmin,trungvi,midpoint]=locminmax(image,n)
clc;closeall;
[row_image,colum_image]=size(image);
fori=1:row_image+2*floor(n/2)
forj=1:colum_image+2*floor(n/2)
loc_anh(i,j)=0;
end
end
fori=1:row_image
forj=1:colum_image
loc_anh(i+floor(n/2),j+floor(n/2))=image(i,j);
end
end
forI=1:row_image
forj=1:colum_image
max=loc_anh(ifloor(n/2)+1,jfloor(n/2)+1);
min=loc_anh(ifloor(n/2)+1,jfloor(n/2)+1);
foru=1:n
forv=1:n
trung_vi(u,v)=loc_anh(ifloor(n/2)+u,jfloor(n/2)+v);
ifloc_anh(ifloor(n/2)+u,jfloor(n/2)+v)>max
max=loc_anh(ifloor(n/2)+u,jfloor(n/2)+v);
end
ifloc_anh(ifloor(n/2)+u,jfloor(n/2)+v)<min
min=loc_anh(ifloor(n/2)+u,jfloor(n/2)+v);
end
end
end
vector=sort(reshape(trung_vi,1,n*n));
trungvi(i,j)=vector(ceil(n*n/2));
locmax(i,j)=max;
locmin(i,j)=min;
midpoint(i,j)=round((max+min)/2);
end
end
end
Thaotác:
>>A=[1234;5678;9012] A= 1234
5678
9012
>>m=fspecial('laplacian',0) m= 010
141
010
>>[locmax,locmin,trungvi,midpoint]=locminmax(A,3)
locmax= 6788
9988
9988
locmin= 0000
0000
0000
trungvi= 0230
1332
0110
midpoint= 3444
5544
5544
4) Lọctrungbìnhhìnhhọc,trungbìnhHarmonicvàtrungbìnhContraharmonicvớimặtnạlọccó
kíchthước33.
Bàilàm:
function[hinhhoc,har,con]=loctrungbinh(image,q)
clc;closeall;
[row_image,colum_image]=size(image);n=3;
fori=1:row_image+2*floor(n/2)
forj=1:colum_image+2*floor(n/2)
loc_anh(i,j)=0;
end
end
fori=1:row_image
forj=1:colum_image
loc_anh(i+floor(n/2),j+floor(n/2))=image(i,j);
end
end
fori=1:row_image
forj=1:colum_image
bientam=1;
s=0;
tu=0;
mau=0;
foru=1:n
forv=1:n
bientam=bientam+loc_anh(ifloor(n/2)+u,
jfloor(n/2)+v);
s=s+1/loc_anh(ifloor(n/2)+u,jfloor(n/2)+v);
tu=tu+loc_anh(ifloor(n/2)+u,jfloor(n/2)+v)^(q+1);
mau=mau+loc_anh(ifloor(n/2)+u,jfloor(n/2)+v)^q;
end
end
hinhhoc(i,j)=bientam*(1/n^2);
har(i,j)=n*n/s;
con(i,j)=tu/mau;
end
end
end
Thaotác:>>A=[1234;5678;9012] A= 1234
5678
9012
>>[hinhhoc,har,con]=loctrungbinh(A,1)
hinhhoc= 1.66672.77783.44442.5556
2.66673.88893.77782.8889
2.33333.22222.77782.1111
har= 0000
0000
0000
con= 4.71435.16675.93336.2727
6.39136.05885.54555.7200
7.10006.85716.41676.5556
5) Thựchiệncânbằnghistogramvớiđầuvàolàảnhxám.
Bàilàm:
functionbai5()
clc;closeall;
origin=imread('D:\Game\anh\Kayle.jpg');
gray=rgb2gray(origin);
hist=histeq(gray);
subplot(2,2,1),imshow(gray);title('gray');
subplot(2,2,2),imshow(hist);title('hist');
subplot(2,2,3),imhist(gray);title('histgray');
subplot(2,2,4),imhist(hist);title('histogram');
end
6) CắtngưỡngtựđộngdựatrênthuậttoáncắtngưỡngOtsu.
Bàilàm:
functionbai6()
clc;closeall;
origin=imread('D:\Game\anh\Kayle.jpg')
subplot(1,2,1);
imshow(origin),title('Orgin');
laynguong=graythresh(origin);
BlackWhite=im2bw(origin,laynguong);
subplot(1,2,2);
imshow(BlackWhite),title('CatnguongtudongOtsu');
end
7) Hiểnthị8látmặtbitcủamộtảnhxám.
Bàilàm:
functionbai7()
clc;closeall;
origin=imread('D:\Game\anh\Kayle.jpg');
gray=rgb2gray(origin);
subplot(3,3,1),imshow(gray),title('gray');
bit1=bitget(gray,1)*2^0;
subplot(3,3,2),imshow(bit1,[]),title('bit1');
bit2=bitget(gray,2)*2^1;
subplot(3,3,3),imshow(bit2,[]),title('bit2');
bit3=bitget(gray,3)*2^2;
subplot(3,3,4),imshow(bit3,[]),title('bit3');
bit4=bitget(gray,4)*2^3;
subplot(3,3,5),imshow(bit4,[]),title('bit4');
bit5=bitget(gray,5)*2^4;
subplot(3,3,6),imshow(bit5,[]),title('bit5');
bit6=bitget(gray,6)*2^5;
subplot(3,3,7),imshow(bit6,[]),title('bit6');
bit7=bitget(gray,7)*2^6;
subplot(3,3,8),imshow(bit7,[]),title('bit7');
bit8=bitget(gray,8)*2^7;
subplot(3,3,9),imshow(bit8,[]),title('bit8');
end
8) Thựchiệncácthaotácerosion,dilation,opening,closing.
Bàilàm:
functionbai8()
clc;closeall;
origin=imread('D:\Game\anh\Kayle.jpg');
gray=rgb2gray(origin);
blackwhite=im2bw(gray,graythresh(gray));
erosion=imerode(blackwhite,[0,1,0;1,1,1;0,1,0]);
subplot(3,2,1),imshow(origin),title('origin');
subplot(3,2,2),imshow(blackwhite),title('BlackWhite');
subplot(3,2,3),imshow(erosion),title('erosion');
dilation=imdilate(blackwhite,[0,1,0;1,1,1;0,1,0]);
subplot(3,2,4),imshow(dilation),title('dilation');
closing=imclose(blackwhite,[0,1,0;1,1,1;0,1,0]);
subplot(3,2,5),imshow(closing),title('closing');
opening=imopen(blackwhite,[0,1,0;1,1,1;0,1,0]);
subplot(3,2,6),imshow(opening),title('opening');
end
9) ViếthàmMatlabthựchiệntuầntựcácchứcnăngsau:
● Đọcmộtảnhmàuvàobiếnoriginvàchuyểnsangảnhxám(gánvàobiếngray).
● Táchriêngtừngkênhmàu(R,G,B)củaảnhorigin.
● ThựchiệnlọctrungvịchotừngkênhmàuR,G,B.
● TạoảnhmàuRGBcótênrgb_filteredtừkếtquảlọc3kênhmàuởtrên.
● Thựchiệnlọctrungvịchoảnhxámgray,gánkếtquảvàobiếngray_filtered.
● Hiểnthịđộsaikháctạimỗiđiểmảnhgiữaảnhxámcủaảnhrgb_filteredvàgray_filtered.
Bàilàm:
functiond=bai9(file)
clc;closeall;
origin=imread('D:\Game\anh\Kayle.jpg');
subplot(3,2,1),imshow(origin),title('origin');
gray=rgb2gray(origin);
subplot(3,2,2),imshow(gray),title('gray');
kenhR=origin(:,:,1);
subplot(3,2,3),imshow(kenhR),title('Red');
kenhG=origin(:,:,2);
subplot(3,2,4),imshow(kenhG),title('Green');
kenhB=origin(:,:,3);
subplot(3,2,5),imshow(kenhB),title('Blue');
trungviR=medfilt2(kenhR,[33]);
trungviG=medfilt2(kenhG,[33]);
trungviB=medfilt2(kenhB,[33]);
rgb_filtered=cat(3,trungviR,trungviG,trungviB);
gray_filtered=medfilt2(gray,[33]);
gray_RGB=rgb2gray(rgb_filtered);
d=abs(gray_RGBgray_filtered);
subplot(3,2,6),imshow(d,[]),title('saikhac');
end
ViếtchươngtrìnhMatlabthựchiệnnhậndạngmộtđốitượngtùyý(1chữcái,chữsố,vậtthể
bấtkỳ,…)
Bàilàm: NhậnDạngKhuônMặt
*Matlab2013cóhàmhỗtrợnhậndạngkhuônmặt.tacóthểsửdụnghàmhỗtrợnàynhưsau:
functionbai10()
%Example1:Facedetection
%
faceDetector=vision.CascadeObjectDetector();%Default:findsfaces
Origin=imread('path_image\.jpg');
bboxes=step(faceDetector,Origin);%Detectfaces
%Annotatedetectedfaces
IFaces=insertObjectAnnotation(Origin,'rectangle',bboxes,'Face');
figure,imshow(IFaces),title('Detectedfaces');
end
*Ýtưởngthựchiệnviếtchươngtrình(khôngsửdụnghàmhỗtrợ):
Sơđồkhốichobàitoán
Tạo1cơsởdữliệugồmnảnh,mỗiảnhđượcđặttêntheothứtựlàcácsónguyêntừ1đếnn
đểtiệnchoviệcquảnlýtậpảnhnày(ntùyvàosốlượngảnh).
Ảnhđượcđưavàotậpcơsởdữliệusẽđượcdùngđểhuấnluyện,từđâysửdụngcácphương
pháptríchrútđặctrưngvàđưaravectođặctrưngchoviệcnhậndạng.
Khiđưaảnhcầnnhậndạngvàotathựchiệntínhtọađộhìnhchiếucủaảnhnàyvàcủacảnhững
ảnhtrongcơsởdữliệuđãcó,rồiđemsosánhkếtquả.
Thựchiệnđokhoảngcách(khoảngcáchEuclid)giữatọađộhìnhchiếucủaảnhcầnkiểmtra
vớitọađộhìnhchiếucủacácảnhtrongcơsởdữliệu.Bứcảnhnàotrongcơsởdữliệucókhoảngcách
sovớiảnhcầnkiểmtralàngắnnhấtthìtachọn.