📄 vqlbg_b.m
字号:
function [center, U] = vqLBG(data, codeBookSize, dispOpt, kmeansFcn)
% vqLBG: Vector quantization using LBG method of center splitting
% Usage: [center, U]=vq(data, codeBookSize, dispOpt)
% data : dataNum x dataDim.
% codeBookSize : codebook size or number of cluster centers (should be the power of 2)
% dispOpt: Option for displaying information during computation
% Roger Jang, 20030330
if nargin==0, selfdemo; return; end;
if nargin<3, dispOpt=0; end;
if nargin<4, kmeansFcn='vqKmeansMex';
% ====== Error checking
[dataDim, dataNum] = size(data);
% Initial Centers: mean of all data
center= mean(data,2);
if dispOpt
plot(data(1,:), data(2,:), 'b.');
centerH=line(center(1,:), center(2,:), 'color', 'r', 'marker', 'o', 'linestyle', 'none', 'linewidth', 2);
axis image
end;
% Do while-loop to increase center number till it is equal to or greater than codebook size.
maxLoopCount = 100;
centerNum = size(center,2);
while (centerNum<codeBookSize)
if dispOpt
fprintf('Hit return to start center splitting...\n'); pause;
end
center=[center-eps, center+eps];
centerNum = size(center,2);
prevDistortion = realmax;
for i = 1:maxLoopCount
[center, distortion, U] = vqUpdateCenter(center, data);
if(abs((prevDistortion-distortion)/prevDistortion) < eps)
break;
else
prevDistortion = distortion;
end
if dispOpt
set(centerH, 'xdata', center(1,:), 'ydata', center(2,:));
drawnow;
end
end;
fprintf('No. of centers = %g, loop count = %g, distortion = %g\n' , centerNum, i, distortion);
end
if dispOpt, vqPlotResult(data, center, U); end
% ====== Self demo
function selfdemo
colordef black
data = dcdata(2)';
codeBookSize=2^4;
dispOpt=1;
codebook = feval(mfilename, data, codeBookSize, dispOpt);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -