12
Ví dụ biến đổi Fourier trong matlab: Cho ảnh f có giá trị tương ứng sau: f(0) = 2,f(1) = 4,f(2) = 6,f(3) = 0 tìm biến đổi Fourier rời rạc của dãy: matlab: đọc vào giá trị tương ứng của f: >> f = [2 4 6 0]; Thực hiện biến đổi Fourier: >> F = ifft(f1) Kết quả thu được như sau: F1 = 3.2500 -0.5000 - 0.2500i -0.2500 -0.5000 + 0.2500i Biến đổi Fourier rời rạc ngược: Cho F(0) = 2i, F(1) = 4i,F(2) = 6i,F(3) = 8i. Tính biến đổi Fourier rời rạc ngược. Matlab: >> F = [2i 4i 6i 8i] F = 0 + 2.0000i 0 + 4.0000i 0 + 6.0000i 0 + 8.0000i >> f = fft(F) Kết quả thu được như sau: f = 0 +20.0000i -4.0000 - 4.0000i 0 - 4.0000i 4.0000 - 4.0000i Ví dụ 5: Đọc vào một ảnh: >> f = imread('cameraman.tif'); Thực hiện phép biển đổi Fourier hai chiều: >> F = fft2(f); Phổ Fourier của ảnh là: >> SF = abs(F); Góc pha: >> pha = angle(F); Hiển thị phổ Fourier của ảnh: >> g = log(1+abs(fftshift(F))); >> imshow(g,[]) Hàm ifft2 (biến đổi Fourier rời rạc ngược hai chiều): >> fn = >> imshow(fn)

Fourier Trong Matlab

Embed Size (px)

Citation preview

V d bin i Fourier trong matlab: Cho nh f c gi tr tng ng sau: f(0) = 2,f(1) = 4,f(2) = 6,f(3) = 0 tm bin i Fourier ri rc ca dy: matlab: c vo gi tr tng ng ca f: >> f = [2 4 6 0]; Thc hin bin i Fourier: >> F = ifft(f1) Kt qu thu c nh sau: F1 = 3.2500 -0.5000 - 0.2500i -0.2500 Bin i Fourier ri rc ngc: Cho F(0) = 2i, F(1) = 4i,F(2) = 6i,F(3) = 8i. Tnh bin i Fourier ri rc ngc. Matlab: >> F = [2i 4i 6i 8i] F= 0 + 2.0000i >> f = fft(F) Kt qu thu c nh sau: f= 0 +20.0000i -4.0000 - 4.0000i

-0.5000 + 0.2500i

0 + 4.0000i

0 + 6.0000i

0 + 8.0000i

0 - 4.0000i 4.0000 - 4.0000i

V d 5: c vo mt nh: >> f = imread('cameraman.tif'); Thc hin php bin i Fourier hai chiu: >> F = fft2(f); Ph Fourier ca nh l: >> SF = abs(F); Gc pha: >> pha = angle(F); Hin th ph Fourier ca nh: >> g = log(1+abs(fftshift(F))); >> imshow(g,[]) Hm ifft2 (bin i Fourier ri rc ngc hai chiu): >> fn = ifft2(F); >> imshow(fn)

hm ifftshift a im v tr trung tm v gc bn tri trn cng ca ph: >>ft= ifftshift(F); Gi nguyn gc pha, thay i ph ca nh: >> G1 = 100 *exp(i*pha); >> f1 = ifft2(G1); Gi nguyn ph, thay i gc pha ca nh: >> G2 = SF*exp(i*100); >> f2 = ifft2(G2); Kt qu thu c nh sau: >> imshow(f1),figure,imshow(f2)

lm sc nt nh vi mt n w nh sau: >> A = 1; >> w = [-1,-1,-1,-1,A+8,-1,-1,-1,-1]; >> a =imread('rice.png'); >> b = filter2(w,p); >> imshow(p), figure, imshow(a/255)

nh gc

nh lm sc nt

Vi A = 1.7, sc nt ca nh gim dn:

Ngoi ra ta c th s dng mt n unsharp lm sc nt nh. V d: >> a = imread('tire.tif'); >> u = fspecial('unsharp',0.5); >> au = filter2(u,a); >> imshow(a),figure,imshow(au/255)

nh gc

After unsharp masking

ng dng khc ca b lc ngc: Lm r nh m do chuyn ng: >> >> >> >> bc = imread('board.tif'); bg = im2uint8(rgb2gray(bc)); b = bg(100:355,50:305); m = fspecial('motion',7,0);

>> bm = imfilter(b,m); >> imshow(bm)

lm r nh ta cn thc hin gia php chia DFT ca nh m cho DFT ca b lc lm m nh. Trc tin cn to ma trn tng ng vi s bin i lm m nh: >> m2 = zeros(256,256); >>m2(1,1:7) = m; >>mf = fft2(m2); >>bmi = ifft2(fft2(bm)./mf); >> imshow(bm),figure, fftshow(bmi,'abs') Kt qu khng c tt do c tnh ca b lc ngc:

khc phc c tnh ca b lc ngc, ta s dng mt ngng ( trnh chia cho 0): >> d = 0.02; >> mf = fft2(m2); >> mf(find(abs(mf)> bmi = ifft2(fft2(bm)./mf); >> imshow(mat2gray(abs(bmi))*2)

Lc thng thp: u tin ta c vo mt nh: >>cm = imread('cameraman.tif'); Dch chuyn ph v trung tm ca nh v hin th n: >>cf = fftshift(fft2(cm)); >> fftshow(cf,'log')

Tip n to mt hnh trn (khot l): >>[x,y] = meshgrid(-128:127,-128:127); >>z = sqrt(x.^2+y.^2); ivi z >15 th c nhn gi tr 0, ngc li c nhn gi tr 1: >>c = (z>cfl = cf.*c; >> fftshow(cfl,'log')

Bin i Fourier ngc hin th nh ban u v hin th nh : >>cfli = ifft2(cfl); >>figure,fftshow(cfli,'log')

Nhiu: cng nhiu Salt and pepper vo mt nh ta dng cu lnh sau: >>t = imnoise(image,salt & pepper) S lng nhiu cng vo c mc nh l 10%. Ta c th cung cp thm cc thng s thay i lng nhiu c cng vo ny. c vo mt nh: >> a = imread('autumn.tif'); Thm nhiu mui v tiu vo nh, vi 10% nhiu cng vo: >> b= imnoise(a,'salt & pepper'); Xa nhiu mui tiu vi lc trung bnh: Thc hin trong matlab bng lnh: >>w = fspecial(average,[m,n]) >>f = imfilter(g,w) p dng loi b nhiu mui v tiu: chuyn nh mu sang nh gi tr xm: >> a = rgb2gray(a); To mt n lc trung bnh 3x3: >> a1 = fspecial('average'); Lc nh vi mt n trung bnh 3x3: >> b1 = filter2(a1,b); >> imshow(b1,[]) To mt n trung bnh 7x7: >> a1 = fspecial('average',[7,7]); Lc nh vi mt n trung bnh 7x7: >> b1 = filter2(a1,b); >> imshow(b1,[]) S dng lc trung v xa nhiu mui tiu: p dng loi b nhiu mui v tiu vi mt n lc mc nh l 3x3: >> b2 = medfilt2(a); >> imshow(b2)

Vi mt n 5x5, nhiu c loi b nhiu hn: >> b3 = medfilt2(a,[5 5]); Nhiu tun hon: >> a = imread('cameraman.tif'); To ma trn tun hon: >> [x y] = meshgrid(1:256,1:256); >> p = sin(x+y/1.5)+1; Cng vo nh ma trn tun hon: >> ap = (double(a)/128+p)/4; Dch ph v trung tm ca nh: >> cpf = fftshift(fft2(ap)) Hin th nh: >> imshow(ap,[]),figure,imshow(log(abs(cpf)+1),[]),pixval on

nhiu tun hon

ph nh

Kh nhiu tun hon: 1. S dng lc Band Reject: S dng mt mt n hnh trn br c bn knh bn trong hnh l z. C gi tr cc pixels bn trong hnh trn l 1 v gi tr cc pixels trn bin l 0. ng bin phi c dy ln che c cc im nhiu. To nhiu tun hon: >> [x,y] = meshgrid(1:256,1:256); >> s = 1+sin(x+y/1.5); c vo mt nh: >> cm = imread('cameraman.tif'); >> cp = (double(cm)/128+s)/4; Dch ph v trung tm ca nh: >> cpf = fftshift(fft2(cp));

>> fftshow(cpf,'log'),pixval on Chng ta s xa nhng thnh phn tng t bin v tr ngc li kt qu. t pixval on v di chuyn xung quanh nh, chng ta tm thy nhng hng, ct c gi tr tng t bin l (156,170) v (102,88). >> [x,y] = meshgrid(-128:127,-128:127); >> z = sqrt(x.^2+y.^2); Khong cch t t ti trung tm ca nh l 49.0918: >> z(156,170) ans = 49.0918 >> z(102,88) ans = 49.0918 Chng ta to ra mt lc vi br = 1 nu (z51) v ngc li bng 0 (gia vng trn nh v vng trn ln): >> br = (z51); Thc hin php nhn bi bin i: >> SF = fftshift(fft2(cp)); >> tbr = SF.*br; >> figure,fftshow(tbr,'log') Bin i Fourier ngc ta c: >> tbri =ifft2(tbr); >> figure,fftshow(tbri,'log')

A band-reject filter2.

After inversion

S dng b lc Notch:

S dng cc ng k ngang v ng k dc che cc im nhiu sao cho giao ca cc ng k ny c th che c cc im nhiu.

To nhiu tun hon >> [x,y] = meshgrid(1:256,1:256); >> s = sin(x+y/1.5)+1; c vo nh cameraman: >> f = imread('cameraman.tif'); Dch ph v trung tm ca nh: >> F = fftshift(fft2(a)); >> sf = (double(f)/128+s)/4; >> SF = fftshift(fft2(sf)); >> fftshow(F,'log'),figure,fftshow(SF,'log')

F

SF

n gin l cho hng v ct ca thnh phn ph nhiu bng 0. Gi s ta ca cc thnh phn nhiu ny ln lt l (156,170), (102,88). >> SF(156,:) = 0; >> SF(102,:) = 0; >> SF(:,88) = 0; >> SF(:,170) = 0; >> figure,fftshow(SF,'log') Bin i Fourier ngc ta thu c nh ban u: >> ln =ifft2(SF); >> fftshow(ln,'log')

SF

ln

Nhiu nhiu trung tm b loi b. To nhiu hng v ct dch chuyn v v tr nhiu s loi b c nhiu nhiu hn.

Pht hin ng bin, bin ngang, bin dc: c vo mt nh: >>ic = imread('circuit.tif'); Pht hin ng bin ng: >>px = [-1 0 1;-1 0 1;-1 0 1]; Tnh p ng mt n px vi nh ic: >>icx = filter2(px,ic); >>figure,imshow(icx/255)

Pht hin ng bin ngang: py= px';% chuyen vi ca px Tnh p ng mt n py vi nh ic: icy = filter2(py,ic); figure,imshow(icy/255)

Kt hp lc ng bin ngang, bin dc: Gi px l kt qu ca lc ng bin song song vi trc oy. Gi py l kt qu ca lc ng bin song song vi trc ox.

Gi p l kt qu tng hp, c gi tr bng:

p2 + p2 x y

>>edge_p = sqrt(icx.^2+icy.^2); >>figure,imshow(edge_p/255) C2: s dng hm edge: G lnh help edge

Php dn: Trong matlab g lnh: >>imdilate(image,kernel ) Vi image l nh nh phn hoc nh mc xm cn gin, kernel l nh nhn hay phn t cu trc. V d: >> t = imread('text.png'); To phn t cu trc sq: >> sq = ones(3,3); Gin nh t theo phn t cu trc sq: >> td = imdilate(t,sq);

nh gc

nh sau khi gin

php co: Trong matlab thc hin lnh: >> imerode (image,kernel ) Vi image l nh nh phn hoc nh mc xm cn co, kernel l nh nhn hay phn t cu trc. V d: >> c = imread('text.png'); Thc hin php co theo phn t cu trc sq:

>> ce = imerode(c,sq);

nh gc

nh co

ng dng php dn v co l: pht hin bin. V d: To nh nh phn da vo ngng xm T: >> rice = imread('rice.png'); >> r = rice > 110; Co nh theo phn t cu trc sq: >> re = imerode(r,sq); Hin th ng bin ca nh theo php hiu: >> r_int = r &~re;

nh gc r

bin nh r_int