Professional Documents
Culture Documents
centerX = width / 2;
centerY = height / 2;
for x = 1:newWidth
for y = 1:newHeight
temp = inv(T) * [x; y; 1];
oldX = round(temp(1));
oldY = round(temp(2));
if oldX >= 1 && oldX <= width && oldY >= 1 && oldY <=
height
rotatedImg(y, x, :) = img(oldY, oldX, :);
end
end
end
subplot(2,2,1);imshow(img);
subplot(2,2,2) ;imshow(rotatedImg);
kết quả :
Code:
folder='D:\baitapxulianh';
imgList = {'01.png', '02.png', '03.png', '04.png', '05.png',
'06.png', '07.png'};
n=numel(imgList);
cnt=0;
while(cnt ~= 7)
for i=1:n
imshow(fullfile(folder, imgList{i}));
pause(1);
end
cnt=cnt+1;
end
Buổi 2:
3.2 chia 1 ảnh thành 16 ảnh sau đó sắp xếp lộn xộn lại các ảnh đó
Code: array = randperm(16) - 1;
image = imread('05.png');
[height, width, ~] = size(image);
w = width / 4;
h = height / 4;
cnt = 1;
img = zeros([16, h, w, 3], 'uint8');
for k = 1:4
for r = 1:4
for x = 1:h
for y = 1:w
img(cnt, x, y, :) = image((h*(k-1)+x), (w*(r-
1)+y), :);
end
end
cnt = cnt + 1;
end
end
I = zeros([height, width, 3], 'uint8');
i = 1;
for k = 1:4
for r = 1:4
for x = 1:h
for y = 1:w
I((h*(k-1)+x), (w*(r-1)+y), :) = img(array(i)
+1, x, y, :);
end
end
i = i + 1;
end
end
imshow(I);
Kết quả:
Buổi 3:
3.1. Vẻ Histogram của một ảnh xám
Code:
img = imread('01.png');
img=rgb2gray(img);
[height, width] = size(img);
num_bins = 256;
histogram = zeros(1, num_bins);
for i = 1:height
for j = 1:width
pixel_value = img(i, j);
histogram(pixel_value + 1) = histogram(pixel_value +
1) + 1;
end
end
figure;
subplot(1,2,1);
imshow(img);
title('ảnh xám');
subplot(1,2,2);
bar(0:num_bins-1, histogram);
xlim([0 num_bins-1]);
title('Histogram');
xlabel('Giá tri pixel');
ylabel('Tần số');
Kết quả :
Code:
img = imread('01.png');
img = rgb2gray(img);
h = imhist(img);
cdf = cumsum(h) / numel(img);
img_eq = uint8(255 * cdf(img + 1));
subplot(221); imshow(img); title('Anh goc');
subplot(223); imshow(img_eq); title('Anh da can bang
histogram');
subplot(222); imhist(img);
subplot(224); imhist(img_eq);
Kết quả :
Nhận xét:Ảnh sau khi cân bằng historam thì các khoảng ảnh tối và ảnh sáng cân bằng hơn
giúp cho ảnh rõ ràng và sáng hơn.
Buổi 4:
4.1. Bộ lọc
I=imread('01.jpg');
I_gray=rgb2gray(I);
H1 = ones(3,3)/9;
H2 = ones(5,5)/25;
H3 = ones(9,9)/81;
Y1 = uint8(conv2(I_gray,H1,’same’));
Y2 = uint8(conv2(I_gray,H2,’same’));
Y3 = uint8(conv2(I_gray,H3,’same’));
figure
subplot(221);
imshow(I_gray); xlabel('Anh goc');
subplot(222);
imshow(Y1); xlabel('Anh qua bo loc H1');
subplot(223);
imshow(Y2); xlabel('Anh qua bo loc H2');
subplot(224);
imshow(Y3); xlabel('Anh qua bo loc H3');
Kết quả:
Nhận xét:
Độ lớn của bộ lộc càng lớn thì ảnh càng mờ dần,chứng tỏ bộ lọc có tác dụng làm mờ
ảnh
4.2. Lọc có nhiễu
img=imread('01.png');
I=rgb2gray(img);
M = floor(size(I,1));
N = floor(size(I,2));
o =50;
rand =randn(M,N);
I_gauss=double(I)+o*rand;
H1 = ones(3,3)/9;
H2 = ones(5,5)/25;
H3 = ones(9,9)/81;
Y1 = uint8(conv2(I_gauss,H1,'same'));
Y2 = uint8(conv2(I_gauss,H2,'same'));
Y3 = uint8(conv2(I_gauss,H3,'same'));
figure
subplot(221);
imshow(I_gauss);
subplot(222);
imshow(Y1);
subplot(223);
imshow(Y2);
subplot(224);
imshow(Y3);
kết quả:
Nhận xét: Cả ba bộ lọc được sử dụng đều cótác dụng làm mượt ảnh và giảm nhiễu. Các bộ
lọc được áp dụng bằng cách tính trung biǹ h các giátrịpixel xung quanh nó. Trong đó:
Bộ lọc H1 sẽ làm mịn ảnh nhẹ nhàng hơn so với H2 và H3 vì nó chỉ tính trung bình của các
pixel xung quanh nó trong vòng 3x3. Vì vậy, nó sẽ giảm nhiễu nhẹ và làm mất chi tiết hình
ảnh nhẹ.
Bộ lọc H2 là bộ lọc trung bình có trọng số 5x5, sẽ làm mịn ảnh mạnh hơn so với H1 và giảm
nhiễu tốt hơn. Tuy nhiên, nó có thể làm mất nhiều chi tiết hơn so với H1.
Bộ lọc H3 là bộ lọc trung bình có trọng số 9x9, sẽ làm mịn ảnh mạnh hơn H2 và làm mất
nhiều chi tiết hơn. Bộ lọc H3 cótác dụng làm giảm nhiễu tốt nhất nhưng khiến ảnh mất đi
nhiều chi tiết quan trọng hơn
I=imread('01.png');
I=rgb2gray(I);
H1 = ones(3,3)/9;
H2 = ones(5,5)/25;
Y1 = uint8(conv2(I,H1,'same'));
Y2 = uint8(conv2(Y1,H2,'same'));
H=1/16*[1 2 1
2 4 2
1 2 1
];
Y3 = uint8(conv2(I,H,'same'));
figure
subplot(121); imshow(Y2); xlabel('Y2');
subplot(122); imshow(Y3); xlabel('Y3');
Kết quả:
Nhận xét Ảnh Y2 (sử dụng bộ lọc H1 và H2) sẽ có độ mờ cao hơn ảnh Y3 (sử dụng bộ lọc
H), do kích thước của bộ lọc H2 lớn hơn H1 và H có trọng số khác nhau cho mỗi pixel trong
vùng lân cận. Khi làm mờ ảnh bằng các bộ lọc trung bình, các pixel được lấy trung bình giá
trị của các pixel trong vùng lân cận, dẫn đến việc làm mất nhiều chi tiết hình ảnh và làm giảm
độ phân giải của ảnh.
ảnh Y2 là phép nhân của hai ma trận còn ảnh Y3 là phép chập của 2 ma trận,về cơ bản là ảnh
Y2 nó sẽ tạo ra một bộ lọc mới nhưng vẫn còn bị mờ còn ảnh Y3 là phép chập của 2 ma trận
nên ảnh sẽ rõ hơn ảnh Y2
Buổi 5:
Ảnh mosaic
img = imread('12.png');
[h, w, t] = size(img)
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);
for i=2:2:h
R(i,:) = 0;
end
for j=2:2:w
R(:,j) = 0;
end
for i=1:2:h
for j=1:2:w
G(i,j) = 0;
end
end
for j=2:2:w
for i=2:2:h
G(i,j) = 0;
end
end
for i=1:2:h
B(i,:) = 0;
end
for j=1:2:w
B(:,j) = 0;
end
I = img;
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;figure
imshow(I,[])
WRB = [1 2 1;2 4 2;1 2 1] / 4;
WG = [0 1 0; 1 4 1; 0 1 0] / 4;
R = conv2(R,WRB,'same');
G = conv2(G, WG,'same');
B = conv2(B, WRB,'same');
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;
figure
imshow(I,[])
Kết quả:
Buổi 6:
Phương pháp demosaic
img = imread('12.png');
[h, w, t] = size(img)
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);
for i=2:2:h
R(i,:) = 0;
end
for j=2:2:w
R(:,j) = 0;
end
for i=1:2:h
for j=1:2:w
G(i,j) = 0;
end
end
for j=2:2:w
for i=2:2:h
G(i,j) = 0;
end
end
for i=1:2:h
B(i,:) = 0;
end
for j=1:2:w
B(:,j) = 0;
end
I = img;
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;figure
imshow(I,[])
WRB = [1 2 1;2 4 2;1 2 1] / 4;
WG = [0 1 0; 1 4 1; 0 1 0] / 4;
R = conv2(R,WRB,'same');
G = conv2(G, WG,'same');
B = conv2(B, WRB,'same');
I(:,:,1) = R;
I(:,:,2) = G;
I(:,:,3) = B;
figure
imshow(I,[])
Code:
Kết quả:
Buổi 7:
7.1, Tính toán biến đổi fourier
Code: img1 = imread('bien.jpg');
img2 = imread('nha.jpg');
img3 = imread('dibo.jpg');
img4 = imread('cay.jpg');
img5 = imread('ban.jpg');
Arr = [2 4 6 8 10];
Arr = Arr(randperm(length(Arr)))
figure
subplot(3,4,1);imshow(img1,[]);
subplot(3,4,3);imshow(img2,[]);
subplot(3,4,5);imshow(img3,[]);
subplot(3,4,7);imshow(img4,[]);
subplot(3,4,9);imshow(img5,[]);
if size(img1, 3) == 3
img1 = rgb2gray(img1);
end
if size(img2, 3) == 3
img2 = rgb2gray(img2);
end
if size(img3, 3) == 3
img3 = rgb2gray(img3);
end
if size(img4, 3) == 3
img4 = rgb2gray(img4);
end
if size(img5, 3) == 3
img5 = rgb2gray(img5);
end
F1 = fft2(double(img1));
F2 = fft2(double(img2));
F3 = fft2(double(img3));
F4 = fft2(double(img4));
F5 = fft2(double(img5));
F1 = fftshift(F1);
F2 = fftshift(F2);
F3 = fftshift(F3);
F4 = fftshift(F4);
F5 = fftshift(F5);
F_mag1 = abs(F1);
F_mag2 = abs(F2);
F_mag3 = abs(F3);
F_mag4 = abs(F4);
F_mag5 = abs(F5);
subplot(3,4,Arr(1));imshow(log(1+F_mag1), []);
subplot(3,4,Arr(2));imshow(log(1+F_mag2), []);
subplot(3,4,Arr(3));imshow(log(1+F_mag3), []);
subplot(3,4,Arr(4));imshow(log(1+F_mag4), []);
subplot(3,4,Arr(5));imshow(log(1+F_mag5), []);
kết quả :
Nhận xét: những ảnh có nhiều góc cạnh thì khi chuyển sang biểu diễn ở miền tần số sẽ có
nhiều đường sáng chạy qua tâm, những đường đó thể hiện sự chuyển đổi mức năng lượng
(các góc cạnh) từ vùng này sang vùng khác trong ảnh.
7.2.Bộ lọc thông thấp butterworh, gauss cho ảnh mosaic
img = imread('19.png');
img=double(img);
[m,n,h]=size(img);
mr=zeros(m,n);
mr(1:2:end,1:2:end)=1;
mb=zeros(m,n);
mb(2:2:end,2:2:end)=1;
mg=1-mr-mb;
Im=img(:,:,1).*mr+img(:,:,2).*mg+img(:,:,3).*mb;
[P, Q] = size(I);
kết quả :
Nhận xét: ta nhận thấy rằng ảnh lọc thông tần số lý tưởng có các biên rõ ràng hơn,
trong khi ảnh lọc Butterworth có vẻ mịn hơn. Ảnh lọc Gaussian mịn hơn cả và có các
chi tiết ảnh bị mất đi.
7.2.1: bộ lọc butterworth
Code: img = imread('19.png');
img=double(img);
[m,n,h]=size(img);
mr=zeros(m,n);
mr(1:2:end,1:2:end)=1;
mb=zeros(m,n);
mb(2:2:end,2:2:end)=1;
mg=1-mr-mb;
Im=img(:,:,1).*mr+img(:,:,2).*mg+img(:,:,3).*mb;
% Compute the 2D Fourier transform of the image
s = fft2(double(Im));
figure
subplot(131)
imshow(Im,[]);
title('ANH GOC');
Fil = zeros(size(s));
[M N] = size(s);
r = (M+1)/2;
c = (N+1)/2;
D0 = min(N/8,M/8);
for i = 1:N
for j = 1:M
Duv = sqrt((i-c)*(i-c) + (j-r)*(j-r));
Fil(j,i) = exp(-Duv*Duv/(2*D0*D0));
end
end
subplot(133)
imshow(Fil,[]);
title('Bo LoC');
S1 = fftshift(s).*Fil;
S1 = ifftshift(S1);
I1 = ifft2(S1);
subplot(132)
imshow(real(I1),[]);
title('ANH Bo LoC');
kếtquả:
[w,h,k]= size(img);
mr = zeros(w,h);
mb = zeros(w,h);
mr(1:2:end,1:2:end) = 1;
mb(2:2:end,2:2:end)= 1;
mg = 1 - mr - mb;
img = double(img);
image1 = img(:,:,1).*mr + img(:,:,2).*mg + img(:,:,3).*mb;
fft2img = fft2(image1);
fft2imgshift = fftshift(fft2img);
magnitude2 = abs(fft2imgshift);
subplot(131); imshow(uint8(image1));
subplot(132); imshow(log(magnitude1),[]);
subplot(133); imshow(log(magnitude2),[]);
Kết quả:
mosaic_R = red;
mosaic_G = green;
mosaic_B = blue;
[m, n, ~] = size(img);
mosaic = zeros(2*m,2*n);
mosaic(1:2:end, 1:2:end) = mosaic_R;
mosaic(1:2:end, 2:2:end) = mosaic_G;
mosaic(2:2:end, 2:2:end) = mosaic_B;
figure
imshow(mosaic);
S = fftshift(fft2(mosaic));
S_I = abs(S);
ang_I = angle(S);
Im = img(:,:,1).*mosaic_R + img(:,:,2).*mosaic_G +
img(:,:,3).*mosaic_B;
fL = [-2 3 -6 3 -2; 3 4 2 4 3; -6 2 48 2 -6; 3 4 2 4 3; -2 3 -
6 3 -2]/64;
L = conv2(Im,fL,'same');
C = Im - L;
C1 = C.* mosaic_R;
C2 = C.* mosaic_G;
C3 = C.* mosaic_B;
img_gray = rgb2gray(img);
S_gray = fftshift(fft2(img_gray));
S_I_gray = abs(S_gray);
figure
Kết quả:
Nhận xét:ta nhận thấy rằng phổ của ảnh mosisac có các điểm đen nằm ở ảnh chứng tỏ
rằng ở giữa đó chứa các tần số thấp ,ảnh Luminance t hì điểm sáng tối rõ hơn ảnh gốc,
còn ảnh chrome chỉ thấy cấu trúc của ảnh .
Buổi 8: Nhận dạng biển số xe