You are on page 1of 3

clc;

close all;

clear all;

I=imread('cameraman.tif');

Lênh imread() sẽ đọc một file thành một ma trận.

I=im2double(I);

Ép kiểu về Double

Vì Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số học.

m=1; Tạo ra m = 1

for i=1:8:256

for j=1:8:256

2 Câu lệnh for này để chạy hết các điểm ảnh của một buwscc ảnh có kích thước
256*256

for x=0:7 x chạy từ 0-> 7

for y=0:7 y chạy từ 0-> 7

img(x+1,y+1)=I(i+x,j+y); Tạo ra ma trận phép biến đổi với kích thước


MxN

img(x+1,y+1) = x

end

end

k=0;

for l=1:8 l= 1 -> 8

img_expect{k+1}=img(:,l)*img(:,l)';

img_expect = [C]x = E[xx']

k=k+1;
end

imgexp=zeros(8:8); Tạo mảng 8x8 với tất cả các phần tử bên trong =0

for l=1:8

imgexp=imgexp+(1/8)*img_expect{l}; %expectation of E[xx']

imgexp là Cx

end

img_mean=zeros(8,1); img_mean = Wj

for l=1:8

img_mean=img_mean+(1/8)*img(:,l); img_mean = Wj

end

img_mean_trans = img_mean*img_mean'; Wj x Wk^t (1.3)

img_covariance = imgexp - img_mean_trans;

[v{m},d{m}]=eig(img_covariance);

[V,D] = eig(A)trả về ma trận đường chéo D của các giá trị riêng và ma trận Vmà các cột của nó là
các thuộc tính riêng tương ứng, do đó A*V = V*D.

temp=v{m};

m=m+1;

for l=1:8

v{m-1}(:,l)=temp(:,8-(l-1));

end

for l=1:8

trans_img1(:,l)=v{m-1}*img(:,l);

end

for x=0:7
for y=0:7

transformed_img(i+x,j+y)=trans_img1(x+1,y+1);

end

end

mask=[1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 ];

trans_img=trans_img1.*mask;

for l=1:8

inv_trans_img(:,l)=v{m-1}'*trans_img(:,l);

end

for x=0:7

for y=0:7

inv_transformed_img(i+x,j+y)=inv_trans_img(x+1,y+1);

end

end

end
end
imshow(transformed_img);
figure
imshow(inv_transformed_img);

You might also like