图像分裂合并的matlab实现Word文件下载.docx

上传人:wj 文档编号:1499693 上传时间:2023-04-30 格式:DOCX 页数:4 大小:11.34KB
下载 相关 举报
图像分裂合并的matlab实现Word文件下载.docx_第1页
第1页 / 共4页
图像分裂合并的matlab实现Word文件下载.docx_第2页
第2页 / 共4页
图像分裂合并的matlab实现Word文件下载.docx_第3页
第3页 / 共4页
图像分裂合并的matlab实现Word文件下载.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

图像分裂合并的matlab实现Word文件下载.docx

《图像分裂合并的matlab实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《图像分裂合并的matlab实现Word文件下载.docx(4页珍藏版)》请在冰点文库上搜索。

图像分裂合并的matlab实现Word文件下载.docx

else

H.color=[111];

%设置白的画布

figure(H);

imshow(I);

title('

原图像'

zeroImage=repmat(uint8(0),[128128]);

 

%为分裂合并后显示的图设置画布

meansImageHandle=imshow(zeroImage);

块均值图像'

%%%%%设置分裂后图像的大小由于本图采用了128像素的图

blockSize=[128643216842];

%%设置一个S稀疏矩阵用于四叉树分解后存诸数据

S=uint8(128);

S(128,128)=0;

threshold=input('

请输入分裂的阈值(0--1):

%阈值

threshold=round(255*threshold);

M=128;

dim=128;

tic

%%%%%%%%%%%%%%%%%分裂主程序%%%%%%%%%%%

while(dim>

1)

[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,[dimdimnumBlocks]);

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(maxValues)-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);

toc

CODE2:

functionmeans=ComputeMeans(I,S)

%用来计算给定图像和稀疏矩阵的块均值

I:

为给定的图像

S:

为稀疏矩阵

means=I;

fordim=[1286432168421];

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)./dim^2+std2(values));

%means=setblk(means,S,dim,sum(sum(values,1),2)./dim^2);

%means=setblk(means,S,dim,mean2(values));

means=setblk(means,S,dim,max(max(values,1),2));

end

CODE3:

function[val,r,c]=getblk(A,S,dim)

%I:

为待处理的图像

%S:

为四叉树分解后返回的稀疏矩阵包含四叉树结构

%Val是dim*dim*k数组,包含图像I的四叉树分解中的每个dim*dim块

%k是四叉树分解的dim*dim块的数量

%如果没有指定大小的块那么返回一个空矩阵

[M,N]=size(A);

if(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,[dimdimnumBlocks]);

CODE4:

functionB=setblk(A,S,dim,val)

%I为待处理的图像

为四叉树分解后的稀疏矩阵包含四叉树结构

%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)],[dimdimnumBlocks]))

if(prod(size(val))==numBlocks)

val=repmat(val(:

)'

[dim^21]);

val=val(:

%为每一个块算出一个索引

%依照索引进行替换%%%%%

blocks=blocks(ones(length(ind),1),:

ind=ind+blocks;

B=A;

B(ind)=val;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2