一段文字拼接的matlab代码,大家可以试试看
破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时间内完成任务。随着计算机技术的发展,人们试图开发碎纸片的自动拼接技术,以提高拼接复原效率。clear;I=imread('xingshi32.bmp');
if(isgray(I)==0)disp('请输入灰度图像,本程序用来处理128 *128的灰度图像!');elseif (size(I)~=)disp('图像的大小不合程序要求!');elseH.color=; %设置白的画布figure(H);imshow(I);title('原图像');zeroImage=repmat(uint8(0),);figure(H); %为分裂合并后显示的图设置画布meansImageHandle=imshow(zeroImage);title('块均值图像');%%%%%设置分裂后图像的大小由于本图采用了128像素的图blockSize=;%%设置一个S稀疏矩阵用于四叉树分解后存诸数据S=uint8(128);S(128,128)=0;threshold=input('请输入分裂的阈值(0--1):');%阈值threshold=round(255*threshold);M=128;dim=128;
%%%%%%%%%%%%%%%%% 分裂主程序%%%%%%%%%%%while (dim>1) = size(I);
Sind = find(S == dim);numBlocks = length(Sind);if (numBlocks == 0)%已完成break;endrows = (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, );
if(isempty(Sind))%已完成break;end=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=;S(Sind)=dim;end=find(S); % 用来寻找四叉机分解结果中大小为S的块的位置set(meansImageHandle,'CData',ComputeMeans(I,S)); % 显示分解结果块均值图像 Numberofbloks=length(i); %计算块数%sizev=size(v);endend
辛苦了! {:soso_e183:}
谢站长!!!! Error using isgray (line 8)
Function ISGRAY has been removed.
为什么我的是这个提示?
页:
[1]