24小时热门版块排行榜    

查看: 413  |  回复: 1

shawmarkk

银虫 (初入文坛)

[求助] 求助用于电子稳像的灰度投影算法源码 已有1人参与

求助用于电子稳像的灰度投影算法源码!急急急!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

沧海逍遥

铁虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
shawmarkk: 金币+200, ★★★★★最佳答案 2015-07-06 18:14:05
%投影法,投影修正,余弦滤波
%水平方向最大偏移正负20个象素
%垂直方向最大偏移正负30个象素
clear all
mov=aviread('v2.avi');   


g=[];

for t=50:80
    mov(t).cdata=rgb2gray(mov(t).cdata);
  
    g=cat(3,g,mov(t).cdata);
end  

gr=[];
gr=cat(3,gr,g(:,:,1));

frow=30;
fcol=20;
  
referenceframe=g(:,:,1);
refprojrow=zeros(240,1);
refprojcol=zeros(1,320);

%行投影
refprojrowsum=0;
for i=1:240
    for j=1:320
        refprojrow(i)=refprojrow(i)+double(referenceframe(i,j));
      
    end  
    refprojrowsum=refprojrowsum+refprojrow(i);
end  
refprojrowmean=refprojrowsum/240;
refprojrow=refprojrow-refprojrowmean;

figure;plot(refprojrow);


for i=1:240
    if (i240-frow)  
       refprojrow(i)=refprojrow(i)*(1+cos(pi*(frow-1-i)/frow))/2;
   end
end
     
hold on
plot(refprojrow,'r');
     
     
%列投影
refprojcolsum=0;
for j=1:320
   for i=1:240
        refprojcol(j)=refprojcol(j)+double(referenceframe(i,j));
      
    end  
    refprojcolsum=refprojcolsum+refprojcol(j);
end  
refprojcolmean=refprojcolsum/320
refprojcol=refprojcol-refprojcolmean;
figure;plot(refprojcol);

for j=1:320
    if (j240-fcol)  
       refprojcol(j)=refprojcol(j)*(1+cos(pi*(fcol-1-j)/fcol))/2;
   end
end
hold on ; plot(refprojcol,'r');

for t=2:20
    t
     
currentframe=g(:,:,t);

%行投影
curprojrow=zeros(240,1);
curprojrowsum=0;

for i=1:240
    for j=1:320
        %refprojrow(i)=refprojrow(i)+double(referenceframe(i,j));
        curprojrow(i)=curprojrow(i)+double( currentframe(i,j));
    end  
    curprojrowsum=curprojrowsum+curprojrow(i);
end  
curprojrowmean=curprojrowsum/240;
curprojrow=curprojrow-curprojrowmean;


for i=1:240
    if (i240-frow)  
       curprojrow(i)=curprojrow(i)*(1+cos(pi*(frow-1-i)/frow))/2;
   end
end

%figure;plot(refprojrow);hold on  
%plot(curprojrow,'r');xlabel('行投影')
%180单位的相关运算   %垂直方向最大偏移正负30个象素
cr=zeros(1,61);
for j=1:61
    for i=1:180
       cr(j)=cr(j)+(refprojrow(j+i-1)-curprojrow(30+i))^2;
    end
end

%figure;plot(cr,'g'); xlabel('垂直方向')

[b,jmin]=min(cr);
dy=31-jmin

%列投影
curprojcol=zeros(1,320);
curprojcolsum=0;

for j=1:320
   for i=1:240
        %refprojcol(j)=refprojcol(j)+double(referenceframe(i,j));
        curprojcol(j)=curprojcol(j)+double(currentframe(i,j));
    end  
    curprojcolsum=curprojcolsum+curprojcol(j);
end  
curprojcolmean=curprojcolsum/320;
curprojcol=curprojcol-curprojcolmean;


for j=1:320
    if (j240-fcol)  
       curprojcol(j)=curprojcol(j)*(1+cos(pi*(fcol-1-j)/fcol))/2;
   end
end

%figure;plot(refprojcol);hold on;
%plot(curprojcol,'r');   xlabel('列投影')

%水平方向最大偏移正负20个象素
%280单位的相关运算
cc=zeros(1,41);
for i=1:41
    for j=1:280
      cc(i)=cc(i)+(refprojcol(j+i-1)-curprojcol(20+j))^2;
    end
end

%figure;plot(cc,'g');   xlabel('水平方向')

[a,imin]=min(cc);
dx=21-imin

if dy<0
    %dy<0,图currentframe相对于referenceframe向上运动了|dy|
    a=zeros(abs(dy),320);
   guoduframe=[a;currentframe(1:240-abs(dy),];
elseif dy>0
    %dy>0,图currentframe相对于referenceframe向下运动了|dy|,
    a=zeros(dy,320);
    guoduframe=[currentframe(1+abs(dy):240,;a];
else
     guoduframe=currentframe;
end


     
if dx<0
   %dx<0,图currentframe相对于referenceframe向左运动了|dx|  
    c=zeros(240,abs(dx));
    buchangframe=[c,guoduframe(:,1:320-abs(dx))];  
elseif dx>0
    %dx>0,图currentframe相对于referenceframe向右运动了|dx|
    c=zeros(240,dx);
    buchangframe=[guoduframe(:,abs(dx)+1:320),c];
else
    buchangframe=guoduframe;
end
  
%figure;imshow(buchangframe);
gr=cat(3,gr,buchangframe);

  %referenceframe=buchangframe;
  %refprojrow=curprojrow;
  %refprojcol=curprojcol;
end
2楼2015-07-06 14:59:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 shawmarkk 的主题更新
信息提示
请填处理意见