图像分裂合并的matlab实现.docx_第1页
图像分裂合并的matlab实现.docx_第2页
图像分裂合并的matlab实现.docx_第3页
图像分裂合并的matlab实现.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档图像分裂合并的matlab实现包含四段程序CODE1:clear;I=imread(xingshi32.bmp);if(isgray(I)=0)disp(请输入灰度图像,本程序用来处理128 *128的灰度图像!);else if (size(I)=128,128) disp(图像的大小不合程序要求!); elseH.color=1 1 1; %设置白的画布figure(H);imshow(I);title(原图像);zeroImage=repmat(uint8(0),128 128);figure(H); %为分裂合并后显示的图设置画布meansImageHandle=imshow(zeroImage);title(块均值图像);%设置分裂后图像的大小由于本图采用了128像素的图blockSize=128 64 32 16 8 4 2;%设置一个S稀疏矩阵用于四叉树分解后存诸数据S=uint8(128);S(128,128)=0;threshold=input(请输入分裂的阈值(0-1):);%阈值threshold=round(255*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);ind = ind(:, ones(1,numBlocks);ind = ind + tmp;blockValues= I(ind);blockValues = reshape(blockValues, dim dim numBlocks);if(isempty(Sind) %已完成 break;endi,j=find(S);set(meansImageHandle,CData,ComputeMeans(I,S);maxValues=max(max(blockValues,1),2);minValues=min(min(blockValues,1),2);doSplit=(double(maxValues)-double(minValues)threshold;dim=dim/2;Sind=Sind(doSplit);Sind=Sind;Sind+dim;(Sind+M*dim);(Sind+(M+1)*dim);S(Sind)=dim;endi,j=find(S); % 用来寻找四叉机分解结果中大小为S的块的位置set(meansImageHandle,CData,ComputeMeans(I,S); % 显示分解结果块均值图像Numberofbloks=length(i); %计算块数%sizev=size(v);endendtocCODE2:function means = ComputeMeans(I, S)% 用来计算给定图像和稀疏矩阵的块均值% I: 为给定的图像% S: 为稀疏矩阵 means = I; 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(values,1),2) ./ dim2); %means = setblk(means, S, dim, mean2(values); means = setblk(means, S, dim, max(max(values,1),2);end endendCODE3:function val,r,c = getblk(A,S,dim)% I:为待处理的图像% S:为四叉树分解后返回的稀疏矩阵包含四叉树结构% Val是dim * dim*k数组, 包含图像I的四叉树分解中的每个 dim *dim 块% k是四叉树分解的dim *dim块的数量% 如果没有指定大小的块那么返回一个空矩阵M,N = size(A);Sind = find(S = dim);numBlocks = length(Sind);if (numBlocks = 0) % 没有找到任何模块val = zeros(dim,dim,0); % 返回空矩阵r = zeros(0,1);c = zeros(0,1);return;end% 为dim *dom的块计算索引%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);ind = ind(:, ones(1,numBlocks);ind = ind + tmp;val = A(ind);val = reshape(val, dim dim numBlocks);CODE4:function B = setblk(A,S,dim,val)% I 为待处理的图像% S:为四叉树分解后的稀疏矩阵包含四叉树结构% Val:是dim * dim *k数组% K :是四叉树分解的dim * dim 大小块的个数% setblk : 用val中相应的dim * dim块的值取代图像 A 的四叉树分解中的每个% dim *dim 块M,N = size(A);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);endendval = val(:);% 为每一个块算出一个索引rows = (0:dim-1);cols = 0:M:(dim-1)*M;rows = rows(:,ones(1,dim);cols = cols(ones(dim,1),:);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论