PDA

查看完整版本 : [求助]求各位大哥帮忙改错~


duyang1219
2008-10-02, 02:34
代码是关于full search pnn的码书编写的。。。。实在不知道该怎么改了。。我是一个刚学一个多月的超级菜鸟,,,很着急谢谢各位了
clear all;
close all;



%read the image detail
image=imread('lena.gif');
image=im2double(image);


%specify the size of the vector is 4, each vector is a 2*2 block
block_width= 4 ;

%according to the vecter size to generate an original codebook
ori_codebook=im2col(image,[block_width block_width],'distinct');
ori_codebook=ori_codebook';
[a b]=size(ori_codebook); %get the size of original codebook


%specify the final codebook size is 8*4, it means there are 8
%clusters(rows) of final codebook.
num_cluster=8;




%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%5%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1. calculate the minimum distance of each vector in original vector.

%2. find the index of the first two nearest vector.

%3. merge the two vector and put their mean value into a new matrix.

%4. move the first two vectors away from the original codebook and then do
%do the same step for another vectors.

%5. test that if the new matrix(step 3) equal to the codebook we want,
%if yes save the codebook, if not, go back to step 1 to merge the vector again.

while a~=num_cluster

x=1;
m=a;


for y=1:a/2; % after the first merge, the column of new codebook must be the half of the original one.


% calculate the minimum distance of each vector in original vector.
for i=2:m
distance(x)=sum((ori_codebook(1,:)-ori_codebook(i,:)).^2);
x=x+1;
end

% find the index of the two nearest vector.
[min_value min_row]=min(distance);
min_row=min_row+1;



% merge the two vector and put their mean value into a new matrix.
codebook(y,:)=0.5*(ori_codebook(1,:)+ori_codebook(min_row,:));



% move the nearest two vectors away from the original codebook and
% built a new codebook.
t=1;
for u=1:m
if u~=1&u~=min_row
tem_codebook(t,:)=ori_codebook(u,:);
t=t+1;
end
end

% after moving away the two nearest vectors, get the size of the
% new codebook and then do the next loop.
ori_codebook=tem_codebook;
[m n]=size(ori_codebook)

end


% test that if the new matrix equal to the codebook we want,
% if yes, save the codebook if not, merge the vector again.
ori_codebook=codebook
[a b]=size(ori_codebook)
end


% save the codebook
new_codebook=ori_codebook
save new_codebook