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

📄 pi_rescale.m

📁 基于matlab的反演程序,用于地球物理勘探中射线追踪及偏移成像程序.
💻 M
字号:
function rescale(action);
if(nargin==1)
end
mainax=findobj(gcf,'type','axes','tag','MAINAXES');
posax=findobj(gcf,'type','axes','tag','POSITIONAXES');
% try
h=get(gcf,'userdata');
hmsg=h(2);
hdat=h(4);
hi=h(5);
hscale=h(6);
hclip=h(7);
hmaster=h(10);
hlimbox=h(14);
limboxflag=get(hlimbox,'value');
ampflag=get(hmaster,'value');
stuff=get(hmaster,'userdata');
mxs=stuff(1);
smean=stuff(2);
stddev=stuff(3);
%get the data
seis=get(hi,'cdata');
%determine old scaling
dat=get(hscale,'userdata');
oldscaleopt=dat(1);
mxsold=dat(2); mnsold=dat(3); smeanold=dat(4); stddevold=dat(5);
%new opt
newscaleopt=get(hscale,'value');
dat(1)=newscaleopt;
%get clip value
inewclip=get(hclip,'value');
ioldclip=get(hclip,'userdata');
set(hclip,'userdata',inewclip);
clips=get(hdat,'userdata');
clipold=clips(ioldclip);
clipnew=clips(inewclip);

%get number of columns in colormap
clrmap=get(gcf,'colormap');
nkols=size(clrmap,1);

flag=computer;
flag='shit';

if(ampflag==1)
    % Figure is Independant
    col=[.8314 .8157 .7843];
    TTS='';
    stddev2=stddev;
    mxs2=mxs;
    smean2=smean;
elseif(ampflag==2)
    % Figure is Master
    col=[1 .5 0];
    TTS='';
    global SMEAN STDDEV MXS
    stddev2=stddev;
    mxs2=mxs;
    smean2=smean;
    SMEAN=smean2;
    STDDEV=stddev;
    MXS=mxs;
elseif(ampflag==3)
    % while figure is slaved, automatically Max Scaling
    col=[1 1 0];
    TTS='Scaling Automatically Forced Master Figure Scaling';
    % Figure is Slave
    limlns=findobj(gcf,'type','line','tag','LIMITLINE');
    limpts=findobj(gcf,'type','line','tag','LIMITPOINT');
    limdat=get(hlimbox,'userdata');
    if(~isempty(limlns))
        delete(limlns);
        delete(limpts);
        delete(limdat{3});
        set(hlimbox,'userdata',[]);
    end
    global SMEAN STDDEV MXS
    stddev2=STDDEV;
    mxs2=MXS;
    smean2=SMEAN;
end
set(hmaster,'backgroundcolor',col,'tooltipstring',TTS);
% 		%undo the old scaling
if( oldscaleopt == 1 ) %undo mean scaling
    mxsprime = min([smeanold+clipold*stddevold,mxsold]);
    mns=-mxsprime;
    smat = (seis-1)*(mxsprime-mns)/(nkols-1) + mns;
elseif( oldscaleopt == 2) %undo max scaling
    mns=-mxsold;
    smat = (seis-1)*(mxsold-mns)/(nkols-1) + mns;
end
ttle=get(mainax,'title');
ttledat=get(ttle,'userdata');
nm=ttledat{3};
if(~ischar(nm))
    return
end
switch nm
    case 'Seismic'
    case 'Amp Spectrum'
        smat=abs(smat);
end
% this next section is called if the limit box has been moved
lmlns=findobj(gcf,'type','line','tag','LIMITLINE');
if(strcmp(action,'limboxrescale')|~isempty(lmlns))
    hlimbox=h(14);
    limfig=get(hlimbox,'userdata');
    if(~isempty(limfig))
        limdat=get(limfig{3},'userdata');
        limmat=[];
        for ii=1:4
            limmat=[limmat str2num(get(limdat(ii),'string'))];
        end
        imxdat=get(hi,'xdata'); imydat=get(hi,'ydata');
        xdat=find(imxdat>=limmat(3) & imxdat<=limmat(4));
        ydat=find(imydat>=limmat(1) & imydat<=limmat(2));
        if(isempty(xdat)|isempty(ydat))
            return
        end
        dddd=[xdat(1) xdat(end) ydat(1) ydat(end)];
        ttle=get(findobj(gcf,'type','axes','tag','MAINAXES'),'title');
        ttledat=get(ttle,'userdata');
        nm=ttledat{3};
        switch nm
            case 'Seismic'
            case 'Amp Spectrum'
                %                     if(size(smat,1)>length(ydat))
                %                     else
                %                         aydat=xdat; 
                %                         axdat=ydat; 
                %                         ydat=aydat;
                %                         xdat=axdat;
                %                     end
        end
        seis2=smat(ydat,xdat);
        if(isempty(seis2))
            return
        end
        mxs2=full(max(max(abs(seis2))));
        smean2=full(mean(mean(seis2)));
        stddev2=full(sqrt( sum(sum((seis2-smean2).^2 ) )...
            /prod(size(seis2))));
        global SMEAN STDDEV MXS
        STDDEV=stddev2;
        MXS=mxs2;
        SMEAN=smean2;
    end
end
%apply new scalingp
if(newscaleopt==1) % mean scaling
    mxsprime = min([smean2+clipnew*stddev2,mxs2]);
    mns=-mxsprime;
    if(isempty(mns)|isempty(mxs2)|isempty(smat))
        return
    end
    seis = (smat -mns)/(mxsprime-mns)*(nkols-1)+1;
    set(hclip,'visible','on');
elseif(newscaleopt==2)  % max scaling
    mns=-mxs2;
    if(isempty(mns)|isempty(mxs2)|isempty(smat))
        return
    end
    seis = (smat -mns)/(mxs2-mns)*(nkols-1)+1;
    set(hclip,'visible','off');
end
switch nm
    case 'Seismic'
    case 'Amp Spectrum'
        seis=abs(seis);
end
dat(1)=newscaleopt;
dat(2)=mxs2;
dat(3)=mns;
dat(4)=smean2;
dat(5)=stddev2;
set(hscale,'userdata',dat);
dat;
set(hi,'cdata',seis);
posax=findobj(gcf,'type','axes','tag','POSITIONAXES');
h=get(get(posax,'title'),'userdata');
seis2=seis(1:4:size(seis,1),1:4:size(seis,2));
set(h(5),'cdata',seis2);

% The following section is going to check if current figure is master
% and if it is Master, find slave figures and have them change
stringinfo=['Rescaling image']; 
if(ampflag==2)
    cfig=gcf;
    findfig=findobj(0,'type','figure','tag','PLOTIMAGEFIGURE');
    if(length(findfig)==1)
        return;
    else
        for ii=1:length(findfig)
            if(findfig(ii)==cfig)
            else
                set(0,'currentfigure',findfig(ii))
                h=get(findfig(ii),'userdata');
                hmaster=h(10);
                if(get(hmaster,'value')==3)
                    h=get(gcf,'userdata');
                    hmsg2=h(2);
                    hscale=h(6);
                    hclip=h(7);
                    if(newscaleopt==1)
                        set(hclip,'visible','on','value',inewclip);
                        set(hscale,'value',1);
                    else
                        set(hclip,'visible','off');
                        set(hscale,'value',2);
                    end
                    plotimage('rescale');
                    stringinfo='Rescaling image and slave(s)';
                    stringinfo2=['Rescaling due to master rescale'];
                    set(hmsg2,'string',stringinfo2,'backgroundcolor',[1 1 1]);
                end
            end
        end
    end
    set(0,'currentfigure',gcf);
end
set(hmsg,'string',stringinfo,'backgroundcolor',[1 1 1]);
% the following is going to turn off position axes if it is supposed to be
% off... I just can't quickly find a better place for it
hbak=findobj(gcf,'tag','BACKING');
checkon=get(hbak,'visible');
if(strcmp(checkon,'off'))
    set(findobj(gcf,'type','axes','tag','POSITIONAXES'),'visible','off');
    set(get(findobj(gcf,'type','axes','tag','POSITIONAXES'),'children'),'visible','off','hittest','off');
end

⌨️ 快捷键说明

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