⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func_detect1.m

📁 用于对天文图像进行去噪和探测
💻 M
📖 第 1 页 / 共 2 页
字号:
        end
        for y=Width-69:Width
            if jieguo(x,y)>0
                for m=10:1:70
                    for n=10:1:70
                        if jieguo(x+m,y-n)==0
                            bz=1+bz;
                        else
                            %  bz=bz-1;
                            i4(x+m,y-n)=jieguo(x+m,y-n);
                        end
                    end
                end                
                if (bz==61*61 && i4(x,y)==0)
                    i4(x,y)=0;
                else
                    i4(x,y)=jieguo(x,y);
                end
                bz=0;
            else
                i4(x,y)=0;
                bz=0;
            end
        end
    end
    clear jieguo x y m n bz;
    
%{
    for i=1:Height
        for j=1:Width
            temp(i,j)=abs(i4(i,j)-i5(i,j));
        end
    end
%}
    [io5,num5] = bwlabel(i5,8); %ig2
    line5 = zeros(1,num5);
    column5 = zeros(1,num5);
    for i=1:num5
        sumx=0;sumy=0;sumi=0;
        for x = 1:Height
            for y = 1:Width
                if io5(x,y) == i
                    sumx = sumx + x*i5(x,y);
                    sumy = sumy + y*i5(x,y);
                    sumi = sumi + i5(x,y);
                end
            end
        end
        line5(i) = sumx/sumi;
        column5(i) = sumy/sumi;
    end
    clear i5 i x y sumx sumy sumi ;
    [io4,num4]=bwlabel(i4,8); %ig2
    line4 = zeros(1,num4);
    column4 = zeros(1,num4);
    for i=1:num4
        sumx=0;sumy=0;sumi=0;
        for x = 1:Height
            for y = 1:Width
                if io4(x,y) == i
                    sumx = sumx + x*i4(x,y);
                    sumy = sumy + y*i4(x,y);
                    sumi = sumi + i4(x,y);
                end
            end
        end
        line4(i) = sumx/sumi;
        column4(i) = sumy/sumi;
    end    
    clear i4 i x y sumx sumy sumi ;
    zuobiao5=[];
    zuobiao4=[];
    for i=1:num5
        for j=1:num4
            if abs(line5(i)-line4(j))<=3 && abs(column5(i)-column4(j))<=3
                zuobiao5=[zuobiao5 i];
                zuobiao4=[zuobiao4 j];
                break;
            end
        end
    end
    if isempty(zuobiao5)==0
        for i=1:size(zuobiao5,2)
            for x=(round(line5(zuobiao5(i)))-5):(round(line5(zuobiao5(i)))+5)
                for y=(round(column5(zuobiao5(i)))-5):(round(column5(zuobiao5(i)))+5)
                    if io5(x,y)==zuobiao5(i)
                        io5(x,y)=0;
                    end
                end
            end
        end
    end
    
    if isempty(zuobiao4)==0
        for i=1:size(zuobiao4,2)
            for x=(round(line4(zuobiao4(i)))-5):(round(line4(zuobiao4(i)))+5)
                for y=(round(column4(zuobiao4(i)))-5):(round(column4(zuobiao4(i)))+5)
                    if io4(x,y)==zuobiao4(i)
                        io4(x,y)=0;
                    end
                end
            end
        end
    end
    
    for i=1:Height
        for j=1:Width
            if io5(i,j)~=0
                io5(i,j)=1;
            end
            if io4(i,j)~=0
                io4(i,j)=1;
            end
        end
    end
    temp=zeros(Height,Width);
    for i=1:Height
        for j=1:Width
            temp(i,j)=abs(io5(i,j)-io4(i,j));
        end
    end
    
    clear io4 io5 i j;    
    [io45,num45]=bwlabel(temp,8); %ig2
    clear temp i4 i5 i j;

    pixelnum45 = zeros(1,num45);
    for i=1:num45
        pixel=0;
        for x = 1:Height
            for y = 1:Width
                if io45(x,y) == i
                    pixel = pixel +1;
                end
            end
        end
        pixelnum45(i) = pixel;
        if pixelnum45(i)<10 %|| len12(i)<=4 || wid12(i)<=4
            for m=1:Height
                for n=1:Width
                    if io45(m,n)==i
                        io45(m,n)=0;
                    end
                end
            end
        end
    end

    jieguo=zeros(Height,Width);
    for i=1:Height
        for j=1:Width
            if io45(i,j)~=0
                jieguo(i,j)=1;
            end
        end
    end
    clear io45 pixelnum45 num45 pixel i j x y;
    
    % ---------- 统计处理后的星图中星个数 -------------------------------------
    [io3,num3]=bwlabel(jieguo',8);
    io3=io3';
    mubiao=[]; %存放目标点在当初检测的所有星的信息中的位置;
    cixu=[]; %存放当前帧目标点在处理后的星图中的位置;
    geshu=0; %检测到的卫星个数;
    mubiao_f=[];
    cixu_q = [];
    direct = zeros(1,num2);
    sudu = zeros(1,num2);

    if num3>0
        line3 = zeros(1,num3);
        column3 = zeros(1,num3);
        count = zeros(1,num3);
        %存放前一帧目标点在处理后星图中的位置;
        for i = 1 : num3
            sumx=0;sumy=0;sumi=0;
            for x = 1:Height
                for y = 1:Width
                    if io3(x,y) == i
                        sumx = sumx + x*i2(x,y);
                        sumy = sumy + y*i2(x,y);
                        sumi = sumi + i2(x,y);
                    end
                end
            end
            line3(i) = sumx/sumi;
            column3(i) = sumy/sumi;
            for m=-10:10
                for n=-10:10
                    mm=round(line3(i))+m;nn=round(column3(i))+n;
                    if mm>0 && mm<=Height && nn>0 && nn<=Width
                        if ig1(mm,nn)~=0
                            count(i)=count(i)+1;
                        end
                    end
                end
            end
            if count(i) >= 10
                cixu_q=[cixu_q i];
            end
        end
        clear  count io3 sumx sumy sumi pixel ymin ymax xmin xmax mm nn m n i jieguo;
        % ---------- 检测多个目标 --------------------
        for i = 1:num2
            for j = 1 : num3
                if abs(round(line2(i))-round(line3(j))) <= 1 && abs(round(column2(i))-round(column3(j))) <= 1
                    mubiao = [mubiao i];
                    cixu = [cixu j];
                end
            end
        end
        cixu_size=size(cixu,2);
        cixuq_size=size(cixu_q,2);
        size_final=min(cixu_size,cixuq_size);
        if size_final > 0
            deltax=zeros(1,size_final);
            deltay=zeros(1,size_final);
            jiaodu=zeros(1,size_final);
            for i = 1 : size_final
                deltax(i) = line3(cixu(i))-line3(cixu_q(i));
                deltay(i) = column3(cixu(i))-column3(cixu_q(i));
                jiaodu(i) = atand(abs(deltax(i))/abs(deltay(i)));

                if deltax(i)>0 && deltay(i)>0
                    direct(mubiao(i)) = 360-jiaodu(i);
                elseif deltax(i)>0 && deltay(i)<0
                    direct(mubiao(i)) = 180+jiaodu(i);
                elseif deltax(i)<0 && deltay(i)>0
                    direct(mubiao(i)) = jiaodu(i);
                else
                    direct(mubiao(i)) = 180-jiaodu(i);
                end
                sudu(mubiao(i)) = sqrt(deltax(i).^2+deltay(i).^2);
                if sudu(mubiao(i))>0 && sudu(mubiao(i))<150
                    geshu=geshu+1;
                    mubiao_f=[mubiao_f mubiao(i)];
                end
            end
        end
    end
    clear mubiao jiaodu deltax deltay i j;
    
    SourceImage=uint16(i2);
    clear i2;
    DestImage=zeros(Height,Width);
    if geshu>0
        for i=1:geshu
            xlabel=round(line2(mubiao_f(i)));
            ylabel=round(column2(mubiao_f(i)));
            %     length=len2(mubiao_f(i));
            %     width=wid2(mubiao_f(i));
            if xlabel>1 && ylabel>1 && xlabel<Height && ylabel<Width
                for x=xlabel-1:xlabel+1
                    for y=ylabel-1:ylabel+1
                        DestImage(x,y)=1;
                    end
                end
            elseif xlabel==1 && ylabel>1 && ylabel<Width
                for x=1:3
                    for y=ylabel-1:ylabel+1
                        DestImage(x,y)=1;
                    end
                end
            elseif ylabel==1 && xlabel>1 && xlabel<Height
                for x=xlabel-1:xlabel+1
                    for y=1:3
                        DestImage(x,y)=1;
                    end
                end
            elseif xlabel==Height && ylabel>1 && ylabel<Width
                for x=Height-2:Height
                    for y=ylabel-1:ylabel+1
                        DestImage(x,y)=1;
                    end
                end
            elseif ylabel==Width && xlabel>1 && xlabel<Height
                for x=xlabel-1:xlabel+1
                    for y=Width-2:Width
                        DestImage(x,y)=1;
                    end
                end
            elseif xlabel==1 && ylabel==1
                for x=1:3
                    for y=1:3
                        DestImage(x,y)=1;
                    end
                end
            elseif xlabel==1 && ylabel==Width
                for x=1:3
                    for y=Width-2:Width
                        DestImage(x,y)=1;
                    end
                end
            elseif ylabel==1 && xlabel==Height
                for x=Height-2:Height
                    for y=1:3
                        DestImage(x,y)=1;
                    end
                end
            elseif ylabel==Width && xlabel==Height
                for x=Height-2:Height
                    for y=Width-2:Width
                        DestImage(x,y)=1;
                    end
                end
            end
        end
        line_out=zeros(1,geshu);
        column_out=zeros(1,geshu);
        direct_out=zeros(1,geshu);
        sudu_out=zeros(1,geshu);

        for i=1:geshu
            line_out(i)=line2(mubiao_f(i));
            column_out(i)=column2(mubiao_f(i));
            direct_out(i)=direct(mubiao_f(i));
            sudu_out(i)=sudu(mubiao_f(i));
        end
    else
        line_out=[];
        column_out=[];
        direct_out=[];
        sudu_out=[];
    end


    if reportoutput == 2
        %--------- 写参数报告dat文件 ---------------------------------------
        fid1=fopen(str{5},'w');
        filename=strcat(str{6},'.fit');
        fprintf(fid1,'FILENAME=%s \n',filename);
        fseek(fid1,0,'cof');
        fprintf(fid1,'TARGET=%s \n','Image');
        fseek(fid1,0,'cof');
        fprintf(fid1,'HEIGHT=%d \n',Height);
        fseek(fid1,0,'cof');
        fprintf(fid1,'WIDTH=%d \n',Width);
        fseek(fid1,0,'cof');
        fprintf(fid1,'STAROBJ_NUM=%d \n',num2);
        fseek(fid1,0,'cof');
        fprintf(fid1,'SATEOBJ_NUM=%d \n',geshu);
        fseek(fid1,0,'cof');

        for i = 1:num2
            if sudu(i) == 0
                fprintf(fid1,'Line=%10.4f   Column=%10.4f   Pixelnum=%6d  Star_Len=%6d  Star_Wid=%6d  Direct=%6.2f   V=%6.2f \n',line2(i),column2(i),pixelnum2(i),len2(i),wid2(i),direct(i),sudu(i)); %
                fseek(fid1,0,'cof');
            end
        end
        %-------- 将卫星的信息放在后面输出 -------------------------
        if geshu>0
            %     if geshu==1
            %         fprintf(1,'There is %d target.\n',geshu);
            %     else
            %         fprintf(1,'There are %d targets.\n',geshu);
            %     end
            for i=1:geshu
                fprintf(fid1,'Line=%10.4f   Column=%10.4f   Pixelnum=%6d  Star_Len=%6d  Star_Wid=%6d  Direct=%6.2f   V=%6.2f \n',line2(mubiao_f(i)),column2(mubiao_f(i)),pixelnum2(mubiao_f(i)),len2(mubiao_f(i)),wid2(mubiao_f(i)),direct(mubiao_f(i)),sudu(mubiao_f(i))); %
                fseek(fid1,0,'cof');
                %         fprintf(1,'The information of target %d are:\n',i);
                %         fprintf(1, ' target_line=%f ;\n target_column=%f ;\n target_size=%d ;\n target_len=%d ;\n target_wid=%d ;\n target_direct=%f ;\n target_speed=%f.\n',line2(mubiao_f(i)),column2(mubiao_f(i)),pixelnum2(mubiao_f(i)),len2(mubiao_f(i)),wid2(mubiao_f(i)),direct(mubiao_f(i)),sudu(mubiao_f(i)));
            end
            % else
            %     fprintf(1,'There is no target.\n');
        end
        fclose(fid1);
    end
else
    err=1;
    SourceImage=zeros(Height,Width);
    DestImage=zeros(Height,Width);
    line_out=[];
    column_out=[];
    direct_out=[];
    sudu_out=[];
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -