1、 elseH.color=1 1 1; %设置白的画布figure(H);imshow(I);title(原图像zeroImage=repmat(uint8(0),128 128); %为分裂合并后显示的图设置画布meansImageHandle=imshow(zeroImage);块均值图像%设置分裂后图像的大小由于本图采用了128像素的图blockSize=128 64 32 16 8 4 2;%设置一个S稀疏矩阵用于四叉树分解后存诸数据S=uint8(128);S(128,128)=0;threshold=input(请输入分裂的阈值(0-1):%阈值threshold=round(25
2、5*threshold);M=128;dim=128;tic% 分裂主程序%while (dim1)M,N = size(I);Sind = find(S = dim);numBlocks = length(Sind);if (numBlocks = 0)%已完成break;end rows = (0:dim-1); cols = 0:M:(dim-1)*M; rows = rows(:,ones(1,dim); cols = cols(ones(dim,1),: ind = rows + cols; ind = ind(:tmp = repmat(Sind, length(ind), 1);
3、ind = ind(:, ones(1,numBlocks);ind = ind + tmp;blockValues= I(ind);blockValues = reshape(blockValues, dim dim numBlocks);if(isempty(Sind) %已完成 break;i,j=find(S);set(meansImageHandle,CData,ComputeMeans(I,S);maxValues=max(max(blockValues,1),2);minValues=min(min(blockValues,1),2);doSplit=(double(maxVal
4、ues)-double(minValues)threshold;dim=dim/2;Sind=Sind(doSplit);Sind=Sind;Sind+dim;(Sind+M*dim);(Sind+(M+1)*dim);S(Sind)=dim; % 用来寻找四叉机分解结果中大小为S的块的位置 % 显示分解结果块均值图像Numberofbloks=length(i); %计算块数%sizev=size(v);tocCODE2:function means = ComputeMeans(I, S)% 用来计算给定图像和稀疏矩阵的块均值% I: 为给定的图像 S: 为稀疏矩阵 means = I;
5、for dim = 128 64 32 16 8 4 2 1;values = getblk(I, S, dim);if (isempty(values) %以下的句子是将小块的平均值来代替原图像中相应的块处的像素% if (min(min(values)=60) means = setblk(means, S, dim, 0); %用于合并时的阈值 else %means = setblk(means, S, dim, sum(sum(values,1),2) ./ dim2+std2(values); %means = setblk(means, S, dim, sum(sum(value
6、s,1),2) ./ dim2); %means = setblk(means, S, dim, mean2(values); means = setblk(means, S, dim, max(max(values,1),2); endCODE3:function val,r,c = getblk(A,S,dim)% I:为待处理的图像% S:为四叉树分解后返回的稀疏矩阵包含四叉树结构% Val是dim * dim*k数组, 包含图像I的四叉树分解中的每个 dim *dim 块% k是四叉树分解的dim *dim块的数量% 如果没有指定大小的块那么返回一个空矩阵M,N = size(A);i
7、f (numBlocks = 0) % 没有找到任何模块val = zeros(dim,dim,0); % 返回空矩阵r = zeros(0,1);c = zeros(0,1);return;% 为dim *dom的块计算索引%rows = (0:cols = 0:rows = rows(:cols = cols(ones(dim,1),:ind = rows + cols;% 计算索引矩阵val = A(ind);val = reshape(val, dim dim numBlocks);CODE4:function B = setblk(A,S,dim,val)% I 为待处理的图像为四叉
8、树分解后的稀疏矩阵包含四叉树结构% Val:是dim * dim *k数组% K :是四叉树分解的dim * dim 大小块的个数% setblk : 用val中相应的dim * dim块的值取代图像 A 的四叉树分解中的每个% dim *dim 块blocks = find(S = dim)numBlocks = length(blocks);if (isequal(size(val,1) size(val,2) size(val,3), dim dim numBlocks)if (prod(size(val) = numBlocks) val = repmat(val(:),dim2 1);val = val(:% 为每一个块算出一个索引% 依照索引进行替换%blocks = blocks(ones(length(ind),1),:ind = ind + blocks;B = A;B(ind) = val;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2