X射线对数曝光曲线是射线检测工作前在一定条件下绘制的透照参数与透照厚度之间的关系曲线,检测人员可以从曲线中取得与检测工件相匹配的透照参数作为参考。对数曝光曲线需要通过实验制作,每台X射线机都有专属的对数曝光曲线不能通用。传统的对数曝光曲线制作和修正方法较繁琐,需在选定的透照条件下采用一系列不同的透照电压和不同的曝光量对阶梯试块进行多次透照,对得到的底片黑度进行测量,得到符合标准黑度要求的透照参数和厚度数据,通过人工在对数坐标纸上绘制曝光曲线,因而要得到高精度连续的曝光曲线,制作和使用难度加大。Matlab是一款很好的数据分析处理软件而且有很强的数据绘图功能,在人工智能和神经网络,建模演算等很多科研领域都有很好的应用,用来读取处理拟合数据绘制射线对数曝光曲线并从曲线上获取需要的透照参数很方便。
1 设计思路
1) 先对阶梯试块进行拍片拿到不同透照条件即不同曝光量和电压的二组六张底片的黑度、透照参数、透照厚度的数据;
2) 绘制不同透照参数的厚度/黑度图即T_D图,并从图中取得黑度D=2.5处的厚度值;
3) 利用从T_D图中取得的黑度D=2.5处的两组(六个)厚度值T和相对应的电压Kv值绘制Kv_T图,用matlab线性拟合插值方法,取出80Kv,100Kv,120Kv,140Kv,160Kv,180Kv,200Kv相对应的厚度值T,并填入表格中;
4) 用matlab命令xlsread读取表中统计的不同透照时间t,厚度值T,用指数函数t=a(1)*exp(a(2)*T)拟合出T_t的函数关系式,取得a(1),a(2)系数值;
5) 用T=log(t/a(1))/a(2),算出t=[0.5,1,1.5,2,3,4,5,7,10,15,20,30,40,60,100]对应的厚度值T,然后利用matlab一二次拟合出厚度T和电压Kv=[80,100,120,140,160,180,200]的一二次关系式Kv=aT2+bT+c,这样就可以得到系数[a,b,c],然后解方程-aT2-bT-c+Kv=0就可以得到Kv=[50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200]对应的数值解厚度T ,最后就可以用plot(T,t)绘制t=[0.5,1,1.5,2,3,4,5,7,10,15,20,30,40,60,100],Kv=[50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200]连续的对数曝光曲线。
2 完整代码
clear
figure(1)%绘制D-T图取D2.5处交点坐标
global pointTD
pointTD=[];
T1=xlsread(‘C:\Users\Desktop\RT-line-200.xlsx’,’D-T’,’A3:A12′)
D1=xlsread(‘C:\Users\Desktop\RT-line-200.xlsx’,’D-T’,’B3:D12′)
subplot(1,2,1)
plot(T1,D1(:,1))
hold on
plot(T1,D1(:,2))
hold on
plot(T1,D1(:,3))
grid on
grid minor
hold on
yline(2.5,’-r’,’D=2.5′,’LineWidth’,0.5)
hold on
T2=xlsread(‘C:\Users\Desktop\RT-line-200.xlsx’,’D-T’,’R3:R12′)
D2=xlsread(‘C:\Users\Desktop\RT-line-200.xlsx’,’D-T’,’S3:U12′)
subplot(1,2,2)
plot(T2,D2(:,1))
hold on
plot(T2,D2(:,2))
hold on
plot(T2,D2(:,3))
grid on
grid minor
hold on
yline(2.5,’-r’,’D=2.5′,’LineWidth’,0.5)
while(~waitforbuttonpress)
set(gcf,’WindowButtonDownFcn’,@axesButtonDownFcn);
end
figure(2)%绘制Kv_T图并拟合读取绘制曝光曲线的厚度值
global pointTD
T3=pointTD(:,1);
Kv=[130,150,180];
plot(T3(1:3),Kv)
hold on
plot(T3(4:6),Kv)
axis([0 20,0,250])
grid on
grid minor
while(~waitforbuttonpress)%等待线性拟合,读取数据,填表完成,按回车继续
end
T1=xlsread(C:\Users\Desktop\RT-line-200.xlsx’,’E-T’,’B2:B15′);
t1=xlsread(‘C:\Users\Desktop\RT-line-200.xlsx’,’E-T’,’C2:C15′);
a=[];
for i=1:2:14
T=[T1(i),T1(1+i)];
t=[t1(1),t1(2)];
b=lsqcurvefit(‘exp_fit’,[1 1],T,t);%cftool
a=[a,b];
TT=0:0.1:50;
tt=a(i)*exp(a(1+i)*TT);
figure(3)
plot(T,t,’o’,TT,tt)
set(gca,’YScale’,’log’);
hold on
grid on
end
t=[0.5,1,1.5,2,3,4,5,7,10,15,20,30,40,60,100];
Kv1=[80,100,120,140,160,180,200];
T=[];
for i=1:15
for j=1:2:13
Ta=log(t(i)/a(j))/a(1+j);
T=[T,Ta];
end
end
Kv_T=[];
for i=1:7:99
Kv_T1=polyfit(T(i:6+i),Kv1,2);
Kv_T=[Kv_T,Kv_T1];
end
ff=[]
% Kv2=[100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250]
Kv2=[50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200]
for i=1:16
for j=1:3:43
a=-Kv_T(j);
b=-Kv_T(1+j);
c=-Kv_T(1+j)+Kv2(i);
delta=b^2-4*a*c;
if delta<0;
display(‘no answers because delta smaller than 0’)
continue;
elseif delta==0;
x1=-b/(2*a),x2=x1;
ff=[ff;x2];
continue;
else
x1=(-b+sqrt(delta))/(2*a),x2=(-b-sqrt(delta))/(2*a)
ff=[ff;x2];
continue;
end
end
end
for i=1:15:226
T=ff(i:14+i);
figure(4)
plot(T,t);
hold on
end
set(gca,’YScale’,’log’);
title(‘对数曝光曲线’,’FontName’,’黑体’)
xlabel(‘厚度 mm’,’FontName’,’黑体’)
ylabel(‘时间 min’,’FontName’,’黑体’)
axis([0 60,0,20])
grid on
grid minor
hold on;
while(~waitforbuttonpress)
set(gcf,’WindowButtonDownFcn’,@axesButtonDownFcn);
end
% — Executes on mouse press over figure background, over a disabled or
% — inactive control, or over an axes background.
function axesButtonDownFcn(hObject, eventdata, handles)
global pointTD
pt = get(gca,’currentpoint’);
T = pt(1,1);
D = pt(1,2);
hold on
plot(T, D,’*’,’color’,’r’,’markersize’,8,’linewidth’,0.5);
pointTD=[pointTD;[T,D]];
end
3 最终效果
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/17409.html