2D转3D算法

  • z5_574610
    了解作者
  • 1.2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-27 12:28
    上传日期
2D转3D算法,能够实现2D图像转成具有3D效果
mubiaobianyuan.rar
  • mubiaobianyuan.m
    3KB
内容介绍
%边缘检测程序 作者朱柱,提取最大连通区域的边缘 close all; clear all; I=imread('shuiguo.bmp'); %minjiangpark.jpg f=I; figure imshow(I),title('原图') I=rgb2gray(I); level = graythresh(I); bw = im2bw(I,level); %se = strel('disk',3); %bw2 = imclose(bw,se); fo=strel('diamond',5); bw2=imopen(bw,fo); %se1=strel('disk',1); %bw2=imdilate(bw,se1); %对图像f进行膨胀操作% %se2=strel('disk',8); %bw2=imopen(bw2,se2); %对图像se2进行开运算% figure imshow(bw),title('二值化图像') figure imshow(bw2),title('形态学处理图像') [L,NUM] = bwlabel(~bw2,4); [wid,hig]=size(L); num=1; mm1=0;mm2=0; for m=1:NUM for i=1:wid for j=1:hig if L(i,j)==m mm2=mm2+1; end end end if mm2>mm1,num=m; end mm1=max(mm1,mm2); mm2=0; end %寻找最大连通成分 for i=1:wid for j=1:hig if L(i,j)==num,bw2(i,j)=1; else bw2(i,j)=0; end end end figure imshow(bw2),title('最大连通成分提取'); %提取最大连通成分的边缘 im=zeros(wid,hig); afa=zeros(wid,hig); for i=2:wid-1 for j=2:hig-1 Gx=sum(sum([bw2(i-1,j-1) bw2(i-1,j) bw2(i-1,j+1);bw2(i,j-1) bw2(i,j) bw2(i,j+1);bw2(i+1,j-1) bw2(i+1,j) bw2(i+1,j+1)].*[1 2 1;0 0 0;-1 -2 -1])); Gy=sum(sum([bw2(i-1,j-1) bw2(i-1,j) bw2(i-1,j+1);bw2(i,j-1) bw2(i,j) bw2(i,j+1);bw2(i+1,j-1) bw2(i+1,j) bw2(i+1,j+1)].*[1 0 -1;2 0 -2;1 0 -1])); Gxy=sum(sum([bw2(i-1,j-1) bw2(i-1,j) bw2(i-1,j+1);bw2(i,j-1) bw2(i,j) bw2(i,j+1);bw2(i+1,j-1) bw2(i+1,j) bw2(i+1,j+1)].*[0 1 2;-1 0 1;-2 -1 0])); Gyx=sum(sum([bw2(i-1,j-1) bw2(i-1,j) bw2(i-1,j+1);bw2(i,j-1) bw2(i,j) bw2(i,j+1);bw2(i+1,j-1) bw2(i+1,j) bw2(i+1,j+1)].*[2 1 0;1 0 -1;0 -1 -2])); im(i,j)=abs((Gx+Gy+Gxy+Gyx)/2); afa(i,j)=atan((Gx+Gxy)/(Gy+Gyx))*180/pi; if afa(i,j)>=0&&afa(i,j)<22.5||afa(i,j)>157.5&&afa(i,j)<180 afa(i,j)=0; elseif afa(i,j)>=22.5&&afa(i,j)<67.5 afa(i,j)=45; elseif afa(i,j)>=67.5&&afa(i,j)<112.5 afa(i,j)=90; else afa(i,j)=135; end end end level=graythresh(im); %边缘图像二值化 ima0=im2bw(im,level); figure,imshow(ima0); title('最大连通成分边缘'); se1=strel('disk',1); ima0=imdilate(ima0,se1); %对边缘图像进行膨胀操作% ima0=uint8(ima0); f=uint8(f); [m n]=size(ima0); fR=255*ima0; fG=0*ima0; fB=0*ima0; rgb_g=cat(3,fR,fG,fB); %figure,imshow(rgb_g); %pause image=rgb_g+f; mri = uint8(zeros(wid,hig,3,20)); for i=1:2:19 mri(:,:,:,i)=f; end for j=2:2:20 mri(:,:,:,j)=image; end mov = immovie(mri); movie(mov,2); C=0; for i=1:wid for j=1:hig if im(i,j)==1&&afa(i,j)==45 C=C+2^(1/2); elseif im(i,j)==1&&afa(i,j)==135 C=C+2^(1/2); elseif im(i,j)==1&&afa(i,j)==0 C=C+1; elseif im(i,j)==1&&afa(i,j)==90 C=C+1; else C=C+0; end end end title(['最大连通区域的周长=',int2str(C)]) %fprintf('边缘距离 = %d', C);
评论
    相关推荐