声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1999|回复: 0

[图像处理] 求救,关于傅立叶描述子进行图像的边界重构问题~~~~~!

[复制链接]
发表于 2007-5-24 19:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这是我毕业设计中的一个程序:利用傅立叶描述子进行边界重构
程序分2个部分:
1.获取原始图像的边界,程序如下:
A=imread('二值图(灰度).bmp');
A=im2bw(A);
imshow(A);
%获取图像的边界
L=bwlabel(A,8);          %对图像进行标记
B=zeros(0,2);            %初始化B
per=bwperim(L);          %得到区域周长的图像
L2=bwlabel(per,8);       %标记区域周长图像
[r,c]=find(L2==1);       %找到组成周长的像素的坐标
rr=zeros(length(r),1);   %初始化rr,cc
cc=zeros(length(c),1);
rr(1)=r(1);cc(1)=c(1);
r(1)=0;    c(1)=0;
dir=0;                   %方向
%寻找边界
for j=1:1:length(r)
    %查找当前点各个方向上的邻居点
    [r1,c1]=find((r==rr(j)+1)&(c==cc(j)));
    [r2,c2]=find((r==rr(j)+1)&(c==cc(j)-1));
    [r3,c3]=find((r==rr(j))&(c==cc(j)-1));
    [r4,c4]=find((r==rr(j)-1)&(c==cc(j)-1));
    [r5,c5]=find((r==rr(j)-1)&(c==cc(j)));
    [r6,c6]=find((r==rr(j)-1)&(c==cc(j)+1));
    [r7,c7]=find((r==rr(j))&(c==cc(j)+1));
    [r8,c8]=find((r==rr(j)+1)&(c==cc(j)+1));
    %依次按1,8,7,6,5,4,3,2的方向把邻居点作为下一个当前点
    x=0; y=0;
    if~isempty(r1)
        x=r1; y=c1; dir=1;
    elseif~isempty(r8)
        x=r8; y=c8; dir=8;
    elseif~isempty(r7)
        x=r7; y=c7; dir=7;
    elseif~isempty(r6)
        x=r6; y=c6; dir=6;
    elseif~isempty(r5)
        x=r5; y=c5; dir=5;
    elseif~isempty(r4)
        x=r4; y=c4; dir=4;
    elseif~isempty(r3)
        x=r3; y=c3; dir=3;
    elseif~isempty(r2)
        x=r2; y=c2; dir=2;
    end % endif
    if x==0 & y==0
          break;
    end
    rr(j+1)=r(x); cc(j+1)=c(x);
    r(x)=0;       c(x)=0;
end;
rr(j+1)=rr(1);
cc(j+1)=cc(1);
B=[rr,cc];
第一个想请教大虾们的问题就是这里的B怎么转换成图像?
2.这是程序的第2个部分,是利用傅立叶描述子对获取的边界B进行重构,程序如下:
[nr,nc]=size(B);
if nr/2~= round(nr/2)  %如果nr不是偶数
      B(end +1,:)=B(end,:);
      nr=nr+1;
end
x=0:(nr-1);           %计算系数
m=((-1).^x)';
B(:,1)=m.*B(:,1);
B(:,2)=m.*B(:,2);
B=B(:,1)+i*B(:,2);
fd=fft(B);            %傅立叶变换
nfd=length(fd);       %傅立叶描述子的长度
n=255;                %用于恢复的项数
d=round((nfd-n)/2);   %计算需要清零的项数
fd(1:d)=0;            %清零
fd(nfd-d+1:nfd)=0;
iff=ifft(fd);         %傅立叶逆变换
ifd(:,1)=real(iff);   %分别提取实部和虚部
ifd(:,2)=imag(iff);
ifd(:,1)=m.*ifd(:,1);
ifd(:,2)=m.*ifd(:,2);
第二个想请教大虾们的问题就是这里的ifd怎么转换成图像?哪位大虾99我啊,小弟在这里谢了!!!!!!!!

[ 本帖最后由 luranlr007 于 2007-5-24 19:50 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 11:18 , Processed in 0.071365 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表