Mình đang có bài tập về nén ảnh trong Matlab, bài tập thì như thế này, từ một cái ảnh đầu vào trắng đen, dùng phương pháp nén lượng tử hóa thích nghi tiến (Forward Adaptive Quantization) để ra thành ảnh nén và sai số, mà thầy cho công thức tức là phải tìm xử lý dữ liệu theo từng khổi, tức là theo block 3x3, 4x4 hoặc 8x8, ví dụ như từ một cái ảnh 400x400 (pixel), ví dụ như dùng block 4x4 thì đầu tiên:
-Xử lý trên block đó, gọi là BM, tìm Min, Max của cái block (4x4 đó)
-rồi tìm DIFF=Max-Min
-Tiếp đến QSTEP=DIFF/L (với L=2^K, với K tức là số bpp, mình cũng chẳng hiểu, mà thầy cho ví dụ là 3 tức L=8)
-rồi cũng trong block đó có một vòng for chạy từ 1:numel(BM) ta tìm code=(BM(i)-Min)/QSTEP; cái code này tức là mức xám đầu ra sau khi nén, rồi mình đưa từ từ từng cái code mới tính vào một cái ma trận rỗng, tức là ảnh trắng.
-Sai số thì mình nghĩ lấy cải ảnh đầu trừ cái ảnh sau khi nén. Mình viết code như dưới thì nó thông báo " Index exceeds matrix dimensions". Bạn nào biết thì vẽ cho mình làm với, sắp tới hạn nộp rồi mà búi quá
-Xử lý trên block đó, gọi là BM, tìm Min, Max của cái block (4x4 đó)
-rồi tìm DIFF=Max-Min
-Tiếp đến QSTEP=DIFF/L (với L=2^K, với K tức là số bpp, mình cũng chẳng hiểu, mà thầy cho ví dụ là 3 tức L=8)
-rồi cũng trong block đó có một vòng for chạy từ 1:numel(BM) ta tìm code=(BM(i)-Min)/QSTEP; cái code này tức là mức xám đầu ra sau khi nén, rồi mình đưa từ từ từng cái code mới tính vào một cái ma trận rỗng, tức là ảnh trắng.
-Sai số thì mình nghĩ lấy cải ảnh đầu trừ cái ảnh sau khi nén. Mình viết code như dưới thì nó thông báo " Index exceeds matrix dimensions". Bạn nào biết thì vẽ cho mình làm với, sắp tới hạn nộp rồi mà búi quá
C=imread('D:\Anh.jpg');
I=rgb2gray(C);
S=size(I);
G=size(I);
for r=1:4:S(1)
for c=1:4:S(2)
BM=I(r:r+3:c:c+3);
Min=min(BM(;
Max=max(BM(;
Diff=Max-Min;
Qstep=Diff/8;
CM=G(r:r+3:c:c+3);
for i=1:numel(BM)
for i=1:numel(CM)
code=(BM(i)-Min)/Qstep;
CM(i)=code;
end
end
end
end
I=rgb2gray(C);
S=size(I);
G=size(I);
for r=1:4:S(1)
for c=1:4:S(2)
BM=I(r:r+3:c:c+3);
Min=min(BM(;
Max=max(BM(;
Diff=Max-Min;
Qstep=Diff/8;
CM=G(r:r+3:c:c+3);
for i=1:numel(BM)
for i=1:numel(CM)
code=(BM(i)-Min)/Qstep;
CM(i)=code;
end
end
end
end