I = double(imread('liftingbody.png'));
Bk = 4;
data = im2col(I, [Bk, Bk], 'distinct');
N = size(data, 2);
M = 100;
rng(999)
%随机选100个向量作为中心
rnd = randi([1, N], [1,M]);
centroid = data(:, rnd);
%LBG训练次数为10
D = zeros([100, N]);
for iter = 1 : 10
for i = 1 : M
for j = 1 : N
D(i,j) = sum( (centroid(: ,i) - data(:, j)).^2 );
end
end
[~, Grp] = min(D);
for i = 1 : M
centroid(:, i) = mean ( data(:, Grp == i), 2 );
end
end
%encoding
X = zeros( size(I)/Bk );
MAT = ones([1, M]);
for i = 1 : N
[~, X(i)] = min( sum((data(:, i)*MAT - centroid).^2) );
end
%decoding
I2 = im2col( zeros(size(I)), [Bk, Bk], 'distinct' );
for i = 1 : N
I2(:, i) = centroid(:, X(i));
end
VQimg = col2im(I2, [Bk, Bk], [size(I, 1), size(I, 2)], 'distinct');
imshow(uint8(VQimg))
matlab图像处理--LBG训练器应用 VQ压缩
最新推荐文章于 2023-12-15 11:40:28 发布