file-type

StyleGAN-NADA:突破领域自适应的图像生成模型

版权申诉

ZIP文件

5星 · 超过95%的资源 | 15.26MB | 更新于2024-11-30 | 30 浏览量 | 6 评论 | 1 下载量 举报 1 收藏
download 限时特惠:#69.90
在当今的AI图像处理领域,图像生成模型是重要的研究方向之一,它利用深度学习技术来生成逼真度极高的图像。StyleGAN-NADA是这一领域中的一个先进模型,代表了自适应图像生成技术的新发展。StyleGAN-NADA将领域自适应的概念应用于图像生成,旨在解决源域和目标域之间的图像风格迁移问题,即在保持内容不变的情况下,将图像从一个领域的风格转换到另一个领域的风格。 领域自适应(Domain Adaptation)是机器学习中的一个重要概念,特别是在没有足够标注数据或当源域与目标域之间存在明显分布差异时,它允许模型将源域学到的知识迁移到目标域。在图像生成领域,这意味着模型能够在不同的视觉风格和条件之间进行有效的转换。 StyleGAN-NADA背后的核心思想是利用预训练的StyleGAN(Style Generative Adversarial Networks)架构,通过一种称为“非自适应域对抗”(Non-Adversarial Domain Adaptation)的方法来调整模型,以便在不同的视觉领域之间进行无监督的学习。StyleGAN是一种基于生成对抗网络(GAN)的高级变体,它在生成高质量图像方面表现出色。它的特点是使用一种被称为“风格混合”(style mixing)的技术,通过在不同层次上混合两个不同图像的风格,可以生成具有新视觉风格的图像。 StyleGAN-NADA通过添加领域分类器来扩展StyleGAN,这个分类器旨在区分来自不同领域的图像,而生成器的任务则是生成难以被分类器区分的图像。通过这种对抗性训练,模型学会在保持内容不变的同时,转换图像的风格。这种无监督学习方式不需要目标域的标注数据,大大降低了领域自适应的难度和成本。 除了领域的适应性,StyleGAN-NADA还提供了一种灵活的方式来控制图像生成过程。利用潜在空间的操纵,用户可以精确地指定想要转换的风格和保留的内容。这种控制是通过改变潜在空间中的向量来实现的,而这些向量编码了图像的风格和内容信息。 对于技术实现,StyleGAN-NADA可能包括以下几个关键组件: 1. 预训练的StyleGAN模型:作为基础的生成模型,用于生成高质量的图像。 2. 领域分类器:用于识别图像属于哪个领域的神经网络。 3. 潜在空间变换:允许用户在潜在空间中操控风格和内容的机制。 4. 对抗性训练过程:一个不断调整模型以实现领域自适应的训练过程。 使用StyleGAN-NADA进行领域自适应的图像生成是一个复杂的过程,需要对深度学习框架(如TensorFlow或PyTorch)以及GAN和StyleGAN的工作原理有深入的理解。此外,由于该模型结合了无监督学习方法,因此对于机器学习理论和统计学的知识也是必不可少的。 在实际应用中,StyleGAN-NADA可以应用于多种场景,例如在艺术创作、电影特效、时尚设计、虚拟现实等领域,通过风格转换来创造出新的视觉体验。同时,它还可以用于图像风格迁移,为图像编辑和增强现实应用提供技术基础。 总结来说,StyleGAN-NADA作为一个将领域自适应和高级GAN技术相结合的模型,不仅在技术上具有创新性,而且在实际应用中具有广泛的可能性。随着相关技术的进一步发展,我们可以期待它将在图像生成领域带来更多的突破和应用。

相关推荐

filetype
filetype

function main() %%%%%%%%%%%%%%%%%%%%%%%-------注入与产出数据处理-------%%%%%%%%%%%%%%%%%%%%%% close all; clear; clc; %形成生产井数据 [num,txt]=xlsread('pro.xls'); proname = num(:,1); %n*1---井名的列向量 num = num(:,2:end); %num(n,:)为第n口井在各时间点上的数据,行为井 %num = num'; [hNum,lNum] = size(num); for i=1:2:lNum pro1(:,(1+i)/2) = num(:,i) + num(:,i+1); %产液 pro1_hsl(:,(1+i)/2) = num(:,i+1)./(num(:,i) + num(:,i+1)+0.00001*ones(length(num(:,i+1)),1)); %含水率 end %%%%形成注入数据 [num,txt]=xlsread('inj.xls'); injname = num(2:end,1)'; %n*1---井名的行向量 num = num'; inj1=num(:,2:end); %inj1(:,n)为第n口井在各时间点上的数据,行为时间 %xlswrite('coord_pro.xls',proname'); %xlswrite('coord_inj.xls',injname')%形成头文件 % xlswrite('连通系数.xls', proname', '连通系数', 'A2') ; % xlswrite('连通系数.xls', injname, '连通系数', 'B1') ; % xlswrite('连通系数.xls', xlsnada, '连通系数', 'B2') ; %提取计算数据,3个月为1组 pro1 = pro1'; pro1_hsl = pro1_hsl'; for i=1:3:size(pro1,1) pro((2+i)/3,:) = pro1(i,:)+pro1(i+1,:)+pro1(i+2,:); pro_hsl(:,(2+i)/3) = (pro1_hsl(i,:)+pro1_hsl(i+1,:)+pro1_hsl(i+2,:))./3; %含水率 inj((2+i)/3,:) = inj1(i,:)+inj1(i+1,:)+inj1(i+2,:); end %clear pro1_hsl; clear pro1; %xlswrite('inj3.xls',inj); xlswrite('pro3.xls',pro) %形成文件 %%%%%%%%%%%%%%%%%%%%%%-------井位坐标处理-------%%%%%%%%%%%%%%%%%%%%%%%%%%%% [cdpro,tmp] = xlsread('coord_pro.xls'); %cdpro(n,:)--第n口井xy坐标 procdname=cdpro(:,1); %procdname列井名 [cdinj,tmp] = xlsread('coord_inj.xls');%cdinj(n,:)--第n口井xy坐标, injcdname = cdinj(:,1); %列井名 %计算注入井和各生产井之间的距离 for i = 1:size(cdinj,1) for j=1:size(cdpro,1) inj_pro_dis(j,i) = norm(cdpro(j,:)-cdinj(i,:)); end end for i=1:size(inj_pro_dis,2) [y I]=sort(inj_pro_dis(:,i),'ascend'); dis_sort(:,i)=I; end % for i=1:size(dis_sort,1) % aa = reshape(dis_sort(1:i,:),1,size(dis_sort,2)*i); % size(unique(aa)) % end % clear aa; %%%%%%%%%%%%%%%%%%%%%-------灰色关联度分析-------%%%%%%%%%%%%%%%%%%%%%%%%%%% %xi=pro_hsl; [rows,cols]=size(xi); p= 0.3 %含水率波动太小 xi=pro'; [rows,cols]=size(xi); p= 0.3 for k = 1:size(inj,2) x0 = inj(:,k)'; %母数据 %求差值 for i = 1:rows deta0i(i,:)=abs(xi(i,:) - x0); end detamax = max(max(deta0i)); detamin = min(min(deta0i)); %得到最大最小值 %求灰色关联系数 for i = 1:rows %rows个油井 for j = 1:cols kc0i(i,j) = (detamin + p*detamax)/(deta0i(i,j)+p*detamax); end end out(:,k) = mean(kc0i,2); %井距离限制 for i = 1:rows if inj_pro_dis(i,k) > inj_pro_dis(dis_sort(12,k),k) out(i,k) = out(i,k) - 1; end % if(size(find(xi(i,:)<=0.01),2) > size(xi,2)*0.7) %去掉很多数据为0的井 % out(i,k) = out(i,k) - 2; % end end end for i=1:size(out,2) [y I]=sort(out(:,i),'descend'); well(:,i)=I; end % for i=1:size(well,1) % aa = reshape(well(1:i,:),1,size(well,2)*i); % size(unique(aa)) % end % clear aa; clear inj_pro_dis; clear dis_sort;clear out; clear xi; clear pro_hsl; % pro=pro1; % inj=inj1; %%%%%%%%%%%%%%%%%%%%%%----拟合----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nadaxls = zeros(size(proname,2),size(injname,2)); for i = 1:size(inj,2) %注入井 %for i = 1:2 %注入井 pron = [pro(:,well(1,i)) pro(:,well(2,i)) pro(:,well(3,i)) pro(:,well(4,i)) pro(:,well(5,i)) ..., pro(:,well(6,i)) pro(:,well(7,i)) pro(:,well(8,i)) pro(:,well(9,i)) pro(:,well(10,i))]; thiswell = [proname(well(1,i)) proname(well(2,i)) proname(well(3,i)) proname(well(4,i)) proname(well(5,i)) ..., proname(well(6,i)) proname(well(7,i)) proname(well(8,i)) proname(well(9,i)) proname(well(10,i))]; j = 1; injn = inj(:,i); while(1) if sum(pron(j,:) < 0.01) == size(pron,2) pron(j ,:) = []; injn(j ,:) = []; j = j-1; end j = j+1; if(j == size(pron,1)) break end end [nadaout(:,i),dout(:,i)] = cal_nada(pron,injn,i,thiswell); i for kk = 1:10 if (nadaout(kk,i) < 0.01) nadaout(kk,i) = 0; end nadaxls(well(kk,i),i) = nadaout(kk,i); delayxls(well(kk,i),i) = dout(kk,i); end end dlmwrite('xlsnada',nadaxls); dlmwrite('xlsdelay',delayxls); dlmwrite('xlsnada8',nadaout); dlmwrite('xlsdelay8',dout); dlmwrite('nadaout',nadaout); dlmwrite('nadout',dout); dlmwrite('bbb',nadaxls); sum(sum(nadaxls')>0) nadaout = dlmread('xlsnada8'); dout = dlmread('xlsdelay8'); nadaxls = dlmread('xlsnada'); %%%%%%%%%%%%%%%%%%%-----绘图-----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:size(well,2) figure(i); plot(inj1(:,i),'bv-','LineWidth',2);hold on; plot(pro1(:,well(1,i)),'r-','LineWidth',1);hold on; plot(pro1(:,well(2,i)),'y-','LineWidth',1);hold on; plot(pro1(:,well(3,i)),'g-','LineWidth',1);hold on; plot(pro1(:,well(4,i)),'c-','LineWidth',1);hold on; plot(pro1(:,well(5,i)),'k-','LineWidth',1); s1 = num2str(injname(i)); s2 = num2str(proname(well(1,i))); s3 = num2str(proname(well(2,i))); s4 = num2str(proname(well(3,i))); s5 = num2str(proname(well(4,i))); s6 = num2str(proname(well(5,i))); legend(s1,s2,s3,s4,s5,s6); Title(strcat('注入井:',num2str(injname(i)))); s1 = char('z_'); s1 = strcat(s1,num2str(injname(i))); s1 =strcat(s1,'.png'); % s1 =strcat(char(injname(i)),'.png'); print(gcf,'-dpng',s1) close(figure(gcf)) ; end %成果图 %画井位,写井位名称 figure(size(well,2) + 1); plot(cdpro(:,1),cdpro(:,2),'ro','MarkerFaceColor','r');hold on; text(cdpro(:,1)+5,cdpro(:,2)+5, num2str(procdname)); hold on; plot(cdinj(:,1),cdinj(:,2),'bo','MarkerFaceColor','b');hold on; text(cdinj(:,1)+5,cdinj(:,2)+5, num2str(injcdname)); hold on; mindis = 500; for i=1:size(well,2) plot_nada(cdinj(i,:),cdpro(well(1,i),:),nadaout(1,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(2,i),:),nadaout(2,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(3,i),:),nadaout(3,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(4,i),:),nadaout(4,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(5,i),:),nadaout(5,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(6,i),:),nadaout(6,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(7,i),:),nadaout(7,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(8,i),:),nadaout(8,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(9,i),:),nadaout(9,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(10,i),:),nadaout(10,i),mindis);hold on; end axis square; print(gcf,'-dpng','成果图.png'); nadaout end %注入点坐标,生产井坐标,连通系数(0-1),三角形高度(最小距离的一半) function plot_nada(injpos,propos,nada,heigh) if nada > 0.001 distmp = norm(injpos-propos); fdk = nada*heigh/(distmp - nada*heigh); B = (injpos + fdk*propos )/(1+fdk); l = nada * heigh * tan(nada/2); a = injpos(1); b = injpos(2); m = B(1); n = B(2); C1x = m - l*(a-m)/sqrt((a - m)^2 + (b - n)^2); C2x = m + l*(a-m)/sqrt((a - m)^2 + (b - n)^2);; C1y = n - (b - n)*(C1x - m)/(a-m); C2y = n - (b - n)*(C2x - m)/(a-m); fill([a C1x C2x a],[b C1y C2y b],'r'); end end 详细解释一下每一段代码

filetype

function main_plot() close all; clear; clc; %绘图 pronum = 5; plot_result(pronum); end %成果图:cdpro proname cdinj injname well nadaout function plot_result(pronum) %画井位,写井位名称 % cdpro = dlmread('out_cdpro'); % cdinj = dlmread('out_cdinj'); % [cdpro,procdname] = xlsread( 'coord_pro.xlsx'); %cdpro(n,:)--第n口井xy坐标,procdname(1,2:end)列井名 % [cdinj,injcdname] = xlsread( 'coord_inj.xlsx');%cdinj(n,:)--第n口井xy坐标,injcdname(1,2:end)列井名 [proname, cdx, cdy] = textread('coord_pro.txt','%s %f %f'); %cdpro(n,:)--第n口井xy坐标,procdname(1,:)列井名 fprintf('输出的整数是: %f\n', cdx); fprintf('输出的整数是: %f\n', cdy) cdpro = [cdx,cdy]; [injname cdx, cdy] = textread('coord_inj.txt','%s %f %f');%cdinj(n,:)--第n口井xy坐标,injcdname(1,2:end)列井名 cdinj = [cdx,cdy]; cdpro = vpa(cdpro); cdinj = vpa(cdinj); cdpro = subs(cdpro);cdinj = subs(cdinj); well = dlmread('out_well'); nadaout = dlmread('out_nadaout'); [num,txt]=xlsread('连通系数.xlsx','连通系数'); % injname = txt(1,2:end)'; % proname = txt(2:end,1); figure(100); plot((double(cdpro(:,1))),(double(cdpro(:,2))),'ro','MarkerFaceColor','r','MarkerSize',5);hold on; text(double((cdpro(:,1))+5),double((cdpro(:,2))+5), proname','fontsize',8); hold on; plot((double(cdinj(:,1))),(double(cdinj(:,2))),'bo','MarkerFaceColor','b','MarkerSize',5);hold on; text(double((cdinj(:,1))+5),double((cdinj(:,2))+5), injname','fontsize',8); hold on; %自动计算小三角形的高度 mindis = inf; for i=1:size(well,2) for j = 1:pronum if(nadaout(j,i) > 0) inj_pro_dis = norm(double(cdinj(i,:))-double(cdpro(well(j,i),:)))/nadaout(j,i); if (mindis > inj_pro_dis) mindis = inj_pro_dis; end end end end mindis = mindis; %计算得到的小三角形的高度置于变量mindis中 mindis = 1*mindis; %如果图像显示结果你感觉小三角形太短,可以使用这条语句加大mindis的值 mindis = 46; for i=1:size(well,2) plot_nada(cdinj(i,:),cdpro(well(1,i),:),nadaout(1,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(2,i),:),nadaout(2,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(3,i),:),nadaout(3,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(4,i),:),nadaout(4,i),mindis);hold on; plot_nada(cdinj(i,:),cdpro(well(5,i),:),nadaout(5,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(6,i),:),nadaout(6,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(7,i),:),nadaout(7,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(8,i),:),nadaout(8,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(9,i),:),nadaout(9,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(10,i),:),nadaout(10,i),mindis);hold on; end %axis equal %axis([15355250 15364250 506100 506550]); %get(gca,'ylim'); get(gca,'xlim') %axis square; print(gcf,'-dpng','成果图.png'); nadaout end % %注入点坐标,生产井坐标,连通系数(0-1),三角形高度(最小距离的一半) % function plot_nada(injpos,propos,nada,heigh) % if nada > 0.001 % % arf = propos(2) - propos(1) % % distmp = norm(injpos-propos); % fdk = nada*heigh/(distmp - nada*heigh); % B = (injpos + fdk*propos )/(1+fdk); % l = nada * heigh * tan(nada/2); % a = injpos(1); b = injpos(2); % m = B(1); n = B(2); % % C1x = m - l*(a-m)/sqrt((a - m)^2 + (b - n)^2); % C2x = m + l*(a-m)/sqrt((a - m)^2 + (b - n)^2);; % C1y = n - (b - n)*(C1x - m)/(a-m); % C2y = n - (b - n)*(C2x - m)/(a-m); % % fill([a C1x C2x a],[b C1y C2y b],'r'); % end % end %注入点坐标,生产井坐标,连通系数(0-1),三角形高度 function plot_nada(injpos,propos,nada,heigh) if(nada > 0.001) arf = atan((propos(2) - injpos(2))/(propos(1) - injpos(1))); if(arf > 0) if(propos(2) - injpos(2) < 0) arf = arf + pi; end end if(arf < 0) if(propos(2) - injpos(2) < 0) arf = arf + 2 * pi; else arf = arf + pi; end end darf = pi/60.0; %偏移180/27度,如果图像显示结果你觉得三角形角度太大,可以把27修改得更大 N2 = nada * heigh /cos(darf); %注水井到一个顶点的距离 x1 = injpos(1) + N2 * cos(arf + darf); y1 = injpos(2) + N2 * sin(arf + darf); x2 = injpos(1) + N2 * cos(arf - darf); y2 = injpos(2) + N2 * sin(arf - darf); fill([double(injpos(1)) double(x1) double(x2) double(injpos(1))],[double(injpos(2)) double(y1) double(y2) double(injpos(2))],'r'); end end 每一段进行解释

filetype

%注:在组织数据时,数据全为0的注入井必须剔除 2015年7月22日 function main() close all; clear; clc; digits(10); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %绘图 % save_nadaxlsx(); % plot_corfig() % plot_result(); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %[pro1 pro1_hsl proname inj1 injname] = get_iodata(); [pro1 pro1_hsl inj1] = get_iodata(); %提取生产数据和注入数据 %提取计算数据,3个月为1组,数据变为行为时间,列为井号 bmerge = 0; %是否3个月一组进行合并 [pro pro_hsl inj] = merge_iodata(pro1,pro1_hsl,inj1,bmerge); %井位坐标处理:cdpro(n,:)--第n口井xy坐标 cdinj(n,:)--第n口井xy坐标 [proname injname cdpro cdinj inj_pro_dis dis_sort] = op_coord(pro); %well为灰色关联度和井距综合考虑之后的相关性井号排名,well(1)关联度最高 [well] = gray_correlation(pro,inj,inj_pro_dis,dis_sort,pro_hsl); [nadaout nadaxls delayxls]= cal_areanada(pro,inj,well,proname,5); [nadaout nadaxls] = reset_nada(well,nadaout); save proname; save injname; save nadaxls; save_nadaxlsx(); %输出一些用于绘图的文件 dlmwrite('out_pro1',pro1); dlmwrite('out_inj1',inj1); dlmwrite('out_cdpro1',double(cdpro)); dlmwrite('out_cdinj',double(cdinj)); dlmwrite('out_well',well); dlmwrite('out_nadaout',nadaout); %绘图 plot_corfig(); plot_result(); end %输出连通系数文件 function save_nadaxlsx() load proname; load injname; load nadaxls; %输出连通系数文件,装了wps,xlswrite不能使用??? xlswrite('连通系数.xlsx', proname, '连通系数', 'A2') ; xlswrite('连通系数.xlsx', injname', '连通系数', 'B1') ; xlswrite('连通系数.xlsx', nadaxls, '连通系数', 'B2') ; end %输出关联图 function plot_corfig() load proname; load injname; load nadaxls; % [num,txt]=xlsread('连通系数.xls','连通系数'); % injname = txt(1,2:end)'; % proname = txt(2:end,1); for i=1:size(well,2) figure(i); plot(inj1(i,:),'bv-','LineWidth',2);hold on; plot(pro1(well(1,i),:),'r-','LineWidth',1);hold on; plot(pro1(well(2,i),:),'y-','LineWidth',1);hold on; plot(pro1(well(3,i),:),'g-','LineWidth',1);hold on; plot(pro1(well(4,i),:),'c-','LineWidth',1);hold on; plot(pro1(well(5,i),:),'k-','LineWidth',1); %看是不是有5口井 s1 = char(injname(i)); s2 = char(proname(well(1,i))); s3 = char(proname(well(2,i))); s4 = char(proname(well(3,i))); s5 = char(proname(well(4,i))); s6 = char(proname(well(5,i))); legend(s1,s2,s3,s4,s5,s6); % legend(s1,s2,s3,s4,s5); title(strcat('注入井:',injname(i))); s1 = char('z_'); s1 = strcat(s1,char(injname(i))); s1 =strcat(s1,'.png'); print(gcf,'-dpng',s1) close(figure(gcf)) ; end end %成果图:cdpro proname cdinj injname well nadaout function plot_result() %画井位,写井位名称 cdpro = dlmread('out_cdpro1'); cdinj = dlmread('out_cdinj'); well = dlmread('out_well'); nadaout = dlmread('out_nadaout'); % [num,txt]=xlsread('连通系数.xls','连通系数'); % injname = txt(1,2:end)'; % proname = txt(2:end,1); load proname; load injname; figure(100); plot(double(cdpro(:,1)),double(cdpro(:,2)),'ro','MarkerFaceColor','r'); hold on; text(double(cdpro(:,1)+5),double(cdpro(:,2)+5), proname'); hold on; plot(double(cdinj(:,1)),double(cdinj(:,2)),'bo','MarkerFaceColor','b'); hold on; text(double(cdinj(:,1)+5),double(cdinj(:,2)+5), injname'); hold on; %看有没有10口井,最后计算nada的油井数目 %mindis = 1310; mindis = 510; for i=1:size(well,2) plot_nada(double(cdinj(i,:)),double(cdpro(well(1,i),:)),nadaout(1,i),mindis);hold on; plot_nada(double(cdinj(i,:)),double(cdpro(well(2,i),:)),nadaout(2,i),mindis);hold on; plot_nada(double(cdinj(i,:)),double(cdpro(well(3,i),:)),nadaout(3,i),mindis);hold on; plot_nada(double(cdinj(i,:)),double(cdpro(well(4,i),:)),nadaout(4,i),mindis);hold on; plot_nada(double(cdinj(i,:)),double(cdpro(well(5,i),:)),nadaout(5,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(6,i),:),nadaout(6,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(7,i),:),nadaout(7,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(8,i),:),nadaout(8,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(9,i),:),nadaout(9,i),mindis);hold on; % plot_nada(cdinj(i,:),cdpro(well(10,i),:),nadaout(10,i),mindis);hold on; end axis square; print(gcf,'-dpng','成果图.png'); nadaout end %注入点坐标,生产井坐标,连通系数(0-1),三角形高度(最小距离的一半) function plot_nada(injpos,propos,nada,heigh) if nada > 0.001 distmp = norm(injpos-propos); fdk = nada*heigh/(distmp - nada*heigh); B = (injpos + fdk*propos )/(1+fdk); l = nada * heigh * tan(nada/2)/20; a = injpos(1); b = injpos(2); m = B(1); n = B(2); C1x = m - l*(a-m)/sqrt((a - m)^2 + (b - n)^2); C2x = m + l*(a-m)/sqrt((a - m)^2 + (b - n)^2);; C1y = n - (b - n)*(C1x - m)/(a-m); C2y = n - (b - n)*(C2x - m)/(a-m); fill([a C1x C2x a],[b C1y C2y b],'r'); end end %注入与产出数据处理 %入口参数: profname---生产井文件 injfname----注入井文件 %出口参数: pro1----产液数据 pro1_hsl----含水率数据 (行为井号,列为月份) % proname----生产井井名,列向量 % inj1----注入数据(行为井号,列为月份) % injname----注入井井名,列向量 %function [pro1 pro1_hsl proname inj1 injname] = get_iodata(profname,injfname) function [pro1 pro1_hsl inj1] = get_iodata(profname,injfname) %形成生产井数据 if nargin < 1, profname = 'pro.txt';injfname = 'inj.txt'; else if nargin < 2, injfname = 'inj.txt'; end end %[proname cx cy] = textread(pro_coord,'%s %f %f'); %cdpro = [cx cy]; %[injname cx cy] = textread(inj_coord,'%s %f %f'); %injpro = [cx cy]; num = dlmread(profname); %num = num(1:end,:); %num(n,:)为第n口井在各时间点上的数据 %proname = txt(3:end,1); %n*1---井名的列向量 %换算为产液和含水率 [hNum,lNum] = size(num); for i=1:2:lNum-1 pro1(:,(1+i)/2) = num(:,i) + num(:,i+1); %产液 pro1_hsl(:,(1+i)/2) = num(:,i+1)./(num(:,i) + num(:,i+1)+0.00001*ones(length(num(:,i+1)),1)); %含水率 end %%%%形成注入数据 % [num,txt]=xlsread(injfname); inj1 = dlmread(injfname); % inj1=num; %形成注入井数据和井名:inj1(n,:)为第n口井在各时间点上的数据 % injname = txt(2:end,1); %n*1---井名的列向量; clear num; clear txt; end %合并注入/产出数据,3月为一组 %把所有数据转为行为时间,列为井号 function [pro pro_hsl inj] = merge_iodata(pro1,pro1_hsl,inj1,bmerge) %提取计算数据,3个月为1组 pro1 = pro1'; pro1_hsl = pro1_hsl'; inj1=inj1'; if bmerge == 0 pro = pro1; pro_hsl = pro1_hsl; inj = inj1; else nline = floor(size(pro1,1)/3); for i=1:3:3*nline pro((2+i)/3,:) = pro1(i,:)+pro1(i+1,:)+pro1(i+2,:); pro_hsl((2+i)/3,:) = (pro1_hsl(i,:)+pro1_hsl(i+1,:)+pro1_hsl(i+2,:))./3; %含水率 inj((2+i)/3,:) = inj1(i,:)+inj1(i+1,:)+inj1(i+2,:); end end clear nline; end %%%%%%%%%%%%%%%%%%%%%%-------井位坐标处理-------%%%%%%%%%%%%%%%%%%%%%%%%%%%% %dis_sort(:,n):所有生产井与第n口注水井的距离由小到大排序 %inj_pro_dis:注入井和生产井距离值 function [ proname injname cdpro cdinj inj_pro_dis dis_sort] = op_coord(pro,cdprof,cdinjf) if nargin < 2, cdprof= 'coord_pro.txt';cdinjf = 'coord_inj.txt'; else if nargin < 3, injfname = 'coord_inj.txt'; end end [proname cdx cdy] = textread(cdprof,'%s %f %f'); %cdpro(n,:)--第n口井xy坐标,procdname(1,:)列井名 cdpro = [cdx cdy]; [injname cdx cdy] = textread(cdinjf,'%s %f %f');%cdinj(n,:)--第n口井xy坐标,injcdname(1,2:end)列井名 cdinj = [cdx cdy]; cdpro = vpa(cdpro); cdinj = vpa(cdinj); cdpro = subs(cdpro);cdinj = subs(cdinj); maxv = vpa(100 * max([max(max((cdinj))),max(max((cdinj)))])); %最大距离 maxv = subs(maxv); mindata = size(pro,1)*0.01; %生产井需要的最小数据点,总数据点的10% %计算注入井和各生产井之间的距离 for i = 1:size(cdinj,1) for j=1:size(cdpro,1) if(sum(pro(:,j)>0) < mindata) inj_pro_dis(j,i) = maxv;%去掉数据几乎没有的点 else inj_pro_dis(j,i) = vpa( norm(subs(cdpro(j,:))-subs(cdinj(i,:)))); end end end for i=1:size(inj_pro_dis,2) [y I]=sort(subs(inj_pro_dis(:,i)),'ascend'); dis_sort(:,i)=I; end end %%%%%%%%%%%%%%%%%%%%%-------灰色关联度分析-------%%%%%%%%%%%%%%%%%%%%%%%%%%% function [well]= gray_correlation(pro,inj,inj_pro_dis,dis_sort,pro_hsl) %xi=pro_hsl; [rows,cols]=size(xi); p= 0.3 %含水率波动太小 xi=pro'; [rows,cols]=size(xi); p= 0.3; % mindata = size(inj,1)*0.1; %注入井需要的最小数据点,总数据点的10% for k = 1:size(inj,2) x0 = inj(:,k)'; %母数据 if(sum(x0) > 0) %注入井必须有数据 temp = find(x0>0); pos = temp(1); %求差值 for i = 1:rows deta0i(i,:)=abs(xi(i,pos:end) - x0(pos:end)); end detamax = max(max(deta0i)); detamin = min(min(deta0i)); %得到最大最小值 %求灰色关联系数 for i = 1:rows %rows个油井 for j = 1:cols-pos+1 kc0i(i,j) = (detamin + p*detamax)/(deta0i(i,j)+p*detamax); end end out(:,k) = mean(kc0i,2); %井距离限制 % if(size(dis_sort,1) > 20) %距离排名在20名以外,都不要进入下一阶段计算 % out(dis_sort(21:end,k),k) = out(dis_sort(21:end,k),k) - 1; % tt = pro_hsl(:,dis_sort(1:20,k)); % else % tt = pro_hsl(:,dis_sort(1:end,k)); % end %距离很近的井,加一个变化的系数补偿,1.6根据井距分布调整 tt = pro_hsl(:,dis_sort(:,k)); for ii = 1:size(dis_sort(:,k),1) out(dis_sort(ii,k),k) = out(dis_sort(ii,k),k) + 1.6/(ii*ii); end % [ytmp,itmp] = max(tt(1,:)); %第一个数据点的含水率看谁最大 % out(dis_sort(itmp,k),k) = out(dis_sort(itmp,k),k) + 2; %初期投产井看见水快慢 % [ytmp,itmp] = max(tt(end,:)+ (tt(1,:)==0)); %后期投产的井看含水高低 % out(dis_sort(itmp,k),k) = out(dis_sort(itmp,k),k) + 2; clear deta0i; clear temp; else ass = 1; end end for i=1:size(out,2) [y I]=sort(out(:,i),'descend'); well(:,i)=I; end clear xi; clear out; clear y; clear I end %wellnum为参与计算的油井个数,根据示踪剂结果来调整,一般为5-10 function [nadaout nadaxls delayxls]= cal_areanada(pro,inj,well,proname,wellnum) nadaxls = zeros(wellnum,size(inj,2)); % wellnum = size(well,1); for i = 1:size(inj,2) %注入井 %注入井周围关联度最高的wellnum口井及其井名 for j=1:wellnum pron(:,j) = pro(:,well(j,i)) ; thiswell(j) = proname(well(j,i)) end % pron1 = [pro(:,well(1,i)) pro(:,well(2,i)) pro(:,well(3,i)) pro(:,well(4,i)) pro(:,well(5,i)) ..., % pro(:,well(6,i)) ]; % thiswell1 = [proname(well(1,i)) proname(well(2,i)) proname(well(3,i)) proname(well(4,i)) proname(well(5,i))..., % proname(well(6,i)) ]; j = 1; injn = inj(:,i); while(1) if sum(pron(j,:) < 0.01) == size(pron,2) pron(j ,:) = []; injn(j ,:) = []; j = j-1; end j = j+1; if(j == size(pron,1)) break end end temp = find(injn>0); if(size(temp,1) == 0) %如果注水井数据全为0,则全置0 for kk = 1: wellnum nadaout(kk,i) = 0; nadaxls(well(kk,i),i) = 0; delayxls(well(kk,i),i) = 0; end else pos = temp(1); %以注入井不为0的点为起点 pron = pron(pos:end,:); injn = injn(pos:end); [nadaout(:,i),dout(:,i)] = cal_nada(pron,injn,i,thiswell); i for kk = 1: wellnum if (nadaout(kk,i) < 0.01) nadaout(kk,i) = 0; end nadaxls(well(kk,i),i) = nadaout(kk,i); delayxls(well(kk,i),i) = dout(kk,i); end clear pron; end end end %将小的数据剔除,重新计算 function [nadaout nadaxls]= reset_nada(well,nadaout) wellnum = size(nadaout,1); if(wellnum > 10) wellnum = 10; end nadaxls = zeros(size(well,1),size(well,2)); for i = 1:size(nadaxls,2) %注入井 for kk = 1:wellnum if (nadaout(kk,i) < 0.085) nadaout(kk,i) = 0; end nadaxls(well(kk,i),i) = nadaout(kk,i); end nadaxls(:,i) = nadaxls(:,i) /sum(nadaxls(:,i)); nadaout(:,i) = nadaout(:,i)/sum(nadaout(:,i)); end end 看不懂这个代码

资源评论
用户头像
朱王勇
2025.06.21
StyleGAN-NADA通过代码+数据的方式推动了图像处理的创新和应用。
用户头像
吹狗螺的简柏承
2025.05.23
使用StyleGAN-NADA,即使是初学者也能迅速掌握图像生成技巧。
用户头像
葡萄的眼泪
2025.05.11
此文档资源有助于深入理解并实现高效的图像生成和自适应转换。
用户头像
whph
2025.05.05
该模型的代码和数据公开,对研究者和开发者而言极具参考价值。
用户头像
药罐子也有未来
2025.04.27
对于想要在AI图像领域取得突破的专业人士,StyleGAN-NADA是一个不可多得的工具。
用户头像
袁大岛
2025.03.18
对于AI图像处理领域,StyleGAN-NADA提供了一种新的图像生成模型,特别在领域自适应方面表现出色。
普通网友
  • 粉丝: 13w+
上传资源 快速赚钱