2017年国赛高教杯数学建模A题CT系统参数标定及成像解题全过程文档及程序

2017年国赛高教杯数学建模

A题 CT系统参数标定及成像

  CT(Computed Tomography)可以在不破坏样品的情况下,利用样品对射线能量的吸收特性对生物组织和工程材料的样品进行断层成像,由此获取样品内部的结构信息。一种典型的二维CT系统如图1所示,平行入射的X射线垂直于探测器平面,每个探测器单元看成一个接收点,且等距排列。X射线的发射器和探测器相对位置固定不变,整个发射-接收系统绕某固定的旋转中心逆时针旋转180次。对每一个X射线方向,在具有512个等距单元的探测器上测量经位置固定不动的二维待检测介质吸收衰减后的射线能量,并经过增益等处理后得到180组接收信息。
  CT系统安装时往往存在误差,从而影响成像质量,因此需要对安装好的CT系统进行参数标定,即借助于已知结构的样品(称为模板)标定CT系统的参数,并据此对未知结构的样品进行成像。
  请建立相应的数学模型和算法,解决以下问题:
  (1) 在正方形托盘上放置两个均匀固体介质组成的标定模板,模板的几何信息如图2所示,相应的数据文件见附件1,其中每一点的数值反映了该点的吸收强度,这里称为“吸收率”。对应于该模板的接收信息见附件2。请根据这一模板及其接收信息,确定CT系统旋转中心在正方形托盘中的位置、探测器单元之间的距离以及该CT系统使用的X射线的180个方向。
  (2) 附件3是利用上述CT系统得到的某未知介质的接收信息。利用(1)中得到的标定参数,确定该未知介质在正方形托盘中的位置、几何形状和吸收率等信息。另外,请具体给出图3所给的10个位置处的吸收率,相应的数据文件见附件4。
  (3) 附件5是利用上述CT系统得到的另一个未知介质的接收信息。利用(1)中得到的标定参数,给出该未知介质的相关信息。另外,请具体给出图3所给的10个位置处的吸收率。
  (4) 分析(1)中参数标定的精度和稳定性。在此基础上自行设计新模板、建立对应的标定模型,以改进标定精度和稳定性,并说明理由。
  (1)-(4)中的所有数值结果均保留4位小数。同时提供(2)和(3)重建得到的介质吸收率的数据文件(大小为256×256,格式同附件1,文件名分别为problem2.xls和problem3.xls)
在这里插入图片描述

整体求解过程概述(摘要)

  本文针对CT系统参数标定及成像问题,建立了基于最小二乘法的CT系统标定模型,求解了CT系统的旋转中心坐标、探测器单元间距以及X射线的180个方向;建立了基于傅立叶变换的图像重建模型,求解了未知介质的吸收率分布;建立了基于滤波反投影法的图像重建模型,求解了噪声较大的未知介质的吸收率分布;设计了新型标定模板并建立了对应的标定模型,解决了改进标定精度和稳定性的问题。
  针对问题一,建立了基于最小二乘法的CT系统标定模型,求解了CT系统的标定参数。首先,通过最小二乘法,将180组接收信息拟合成正弦函数,根据几何关系联立方程组求解出180个旋转角度,以及探测器单元间距𝑑=0.2758。其次,通过最小二乘优化、变步长遍历搜索的方法,求得旋转中心为(-9.2513,5.6783)。最后,基于所得标定参数及已知模板的吸收率分布,求解标定模板的接收信息,进行残差分析,检验了标定模型的合理性。
  针对问题二,建立了基于傅立叶变换的图像重建模型,求解了未知介质的吸收率分布。首先,依据 Radon 变换及中心切片定理,对投影数据进行一维傅立叶变换,得到定义在傅立叶空间的极坐标网格。其次,在频域上对投影进行积分,再次,直接通过二维傅立叶反变换得到重建图像,其中10处吸收率分别为0.0000、0.0000、1.0060、0.0000、1.0081、0.0081、0.0000、0.1008、0.0081、0.0081。最后,对标定参数进行了灵敏度分析。
  针对问题三,建立了基于滤波反投影法的图像重建模型,求解了噪声较大的未知介质的吸收率分布。首先,采用问题二的方法,发现重建图像噪声较大,改用滤波反投影算法去除重建图像的伪影。再次,选择中值滤波器进行滤波卷积,采用线性内插的方法进行插值,反投影累加后得到重建图像,其中 10处吸收率分别为 2.0323、1.2863、2.0081、1.6370、2.0484、2.0081、0.0000、2.0343、1.5363、0.0403。最后,对标定参数进行了灵敏度分析。
  针对问题四,设计了新型标定模板并建立了对应的标定模型,解决了改进标定精度和稳定性的问题。首先,对原有模板进行误差分析,得出对椭圆边缘处接收信息的插值拟合会导致旋转角度出现误差的结论。其次,为避免类似误差,设计圆形组合模板,并建立对应标定模型。再次,对比基于新旧模板的不同标定参数的图像重建模型,求得新旧模板的峰值信噪比分别为50.3614、52.2537。最后,求解基于不同旋转角度个数的归一化均方距离,新模板重建图像精度趋于稳定的旋转次数小于旧模板,进而验证了基于新模板的标定模型精度更高,更稳定。

模型假设:

  1. 假设射线源中点与转台旋转中心连线垂直于探测器阵列;
  2. 假设射线源的衰减仅与被介质吸收有关,并未产生散射;
  3. 假设增益处理是线性增大的。

问题分析:

  问题整体思路较为清晰,层层递进。问题一是根据已知标定模板的吸收率及其接收信息对CT系统进行正向标定的问题。问题二、三建立在问题一求解的标定系数基础之上,是依据不同的接受信息对未知介质的吸收率分布进行反向重建的问题。分析问题二、三的接受信息可发现问题三图像噪声偏大,故对问题三的求解大致思路与问题二类似,但需进行进一步的降噪处理。问题四需对原有标定模型进行精度和稳定性分析,并设计新的模板及标定模型,进而提高精度及稳定性,属于优化问题。
  问题一的分析
  首先,分析题目条件可知,均匀模板的吸收率分布及对应的接受信息已知,且模板质地均匀,故射线衰减公式中的对吸收率分布进行的线积分可简单变为介质厚度,故可对接收信息的表达式进行求解。 其次,要将离散的接受信息连续化,可考虑通过最小二乘法对其进行拟合, 初步分析为两个近似正弦曲线,分别对应图中的椭圆和圆,其中正弦曲线与X轴相交的情况反应了平行光束与椭圆相切的两条切线距离的大小。由于两切线之间的距离与旋转中心[1]、旋转角度存在一定的几何关系,列出关系式,联立方程可解出各个旋转角度的值。 再次,基于上述拟合曲线及几何关系式,可求得多个探测器单元间距及旋转中心的坐标。针对探测器单元间距的求解,出于对使用信息完整性的考虑,可通过多次求解方程组,并对多个解取平均得到最终答案。针对旋转中心的求解,由于探测器中垂线衡过旋转中心,且旋转角度已求解得到,故可列出不同角度下中垂线的直线方程,两两联立即可求出旋转中心。出于保留信息完整性,同时避免算法过于复杂的考虑,故均匀抽取30组直线,得到元素个数为345的点集。可通过最小二乘优化[2],建立各点到中心点距离平方和最小的目标函数,可通过变步长遍历搜索的方法,求解旋转中心。 最后,由于接受信息的表达式可被求解,且介质吸收率分布已知,故可对已知模板的接受信息进行模拟,可与题中所给条件进行比对,进行残差分析,即可检验模型的合理性。
  问题二的分析
  首先,分析题目条件可知,由于在第一问已对CT系统进行了标定,故可根据题中所给的接收信息,对图像进行重建。对图像重建的常用方法有傅里叶变换法、滤波反投影法,由于部分接收信息的拟合后的图像较为平滑,故采用算法较为简单的傅里叶变换法。 其次,在推导非均匀介质中衰减公式时,可对非均匀物体进行微元化考虑,进而对射线贯穿部分的吸收率分布进行线积分。可根据Radon变换[3]及中心切片定理[4],得到多个角度下的投影后,通过投影反变换可求出被积函数即线衰减系数函数,从而得到对应的线衰减系数分布的图像,重建出问题二中非均匀物体的形状及在正方形托盘上的位置。 再次,为得到题中所要求的10个点的吸收率,需要得到吸收率与图像灰度值之间的关系。由于问题一中模板条件已知,运用问题二中的算法可重建出问题一中的模板图像,得到已知模板图像与重建模板图像之间的灰度值关系后再据此关系得问题三图像的10个吸收率。 最后,可针对三个不同标定参数,进行固定比率的修改,并计算参数修改后重建图像吸收率分布的变化率,可据此对各标定参数进行灵敏度分析。
  问题三的分析
  首先,问题三与问题二提供的条件并无二致,然而通过观察附件中的接收信息值,可发现数据在表格中的分布更加复杂,很可能导致运用问题二中的傅立叶变换算法重建出的图像质量不佳,故在问题三考虑采用更优的算法重建图像。通过查阅文献可知,滤波反投影算法[5]可大大消除反投影重建算法的模糊现象,保证重建图像的边缘清晰和内部分布均匀,得到质量较好的重建图像。故可改用滤波反投影算法进行图像重建。 其次,滤波反投影算法的关键在于滤波函数的选取,在众多滤波函数中,中值滤波[6]对噪声的除噪作用较显著,能够较好地保护图像边缘,降低噪声。根据反投影算法,得到滤波后的投影数据便可对图像进行重建,但平行束投影的采集过程中,射线发射器和接收器是离散的,与此同时角度采样也是离散化的,故需要选用合适的插值方法对滤波后的投影数据进行处理。通过查阅文献可知,常用方法有线性内插和紧邻内插,线性内插更优,故可采用线性内插的方法。由此,可对投影数据进行反变换,进而得重建后的图像及吸收率分布。 最后,可针对三个不同标定参数,进行固定比率的修改,并计算参数修改后重建图像吸收率分布的变化率,可据此对各标定参数进行灵敏度分析。
  问题四的分析
  首先,分析题目可知,应先对原有模板进行误差分析,进而考虑新模板的设计方向。由于问题一中对椭圆边缘处的接收信息进行拟合时存在一定误差,故造成对射线旋转方向的求解产生了误差。为避免这一误差,可考虑设计组合圆模板对上述误差进行规避,通过设计特殊的圆心及半径,避免拟合,进而得到优化后的旋转角度。 其次,要对比基于新旧模板标定模型的优劣,可通过比对基于不同标定参数的图像重建模型的优劣来体现。根据题意,从精度及稳定性[7]两方面来考虑。 针对精度,可建立重建图像评价指标。一般指标有归一化均方距离、归一化平均绝对距离、峰值信噪比,由于三个指标互成正比或反比,故无需对各指标进行赋权,针对基于新旧标定参数的图像重建模型,可通过重建原有模板图形,计算各指标值,比对新模型的经度是否更高。
  针对稳定性,由于重建模型的重建质量是关于旋转角度个数变化而变化的针对这一动态过程,模型的稳定性刻画了重建图像精度随旋转角度个数增加的变化趋势。故可通过均匀减少图像旋转角度个数,求解新旧图像重建模型的归一化均方距离。对上述散点图进行插值拟合,即可得到新旧图像重建模型的图像精度变化趋势,比对新旧模型的稳定点,即可比对新旧模型的稳定性。 最后,依据精度和稳定性两个评价指标,即可判定新模板及其对应标定模型的合理性。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

%最小二乘法拟合正弦曲线MATLAB代码 
function [aa,zd] = q1(xdata,ydata) 
% ydata=xlsread('C:\Users\hp\Desktop\A.xls','a','C1:C29'); 
% ydata=ydata'; 
%估计正弦曲线的初值 
A=max(ydata); 
T=length(ydata);%假设用的是一个周期的正弦波拟合,只是猜测值 
w=2*pi/T; 
c=pi; 
d=mean(ydata); 
options = optimset('MaxFunEvals',1000000); %保证精度 
x_est = lsqcurvefit(@(x,xdata) myfun(x,xdata),[A w c d],xdata,ydata);% 利用
lsqcurvefit 函数拟合 
plot(xdata,myfun(xdata,x_est))%画出拟合图 
aa=2*pi/w;%计算拟合后的周期 
zd=A+d;%计算拟合后的最高点 
%180 个角度计算MATLAB代码 
function [aa] = q1_1(~) 
aa=1; 
data=xlsread('C:\Users\hp\Desktop\A.xls','附件 2');%导入数据 
for i=109:180 
ydata=data(:,i);%初始化处理矩阵 
%以下为初始化参数值 
flag=0; 
s1=0; 
s2=0; 
ydata1=0; 
ydata2=0; 
%以下将图中两个椭圆分开,把分开后的非零值分别放入两个矩阵 
for j=1:512 
if j==1 
if ydata(j,1)~=0 
flag=1; 
end 
else 
if (ydata(j,1)~=0)&&(ydata(j-1,1)==0)&&(flag~=2) 
flag=1; 
end 
if (ydata(j,1)==0)&&(ydata(j-1,1)~=0)
flag=2; 
end 
if (ydata(j,1)~=0)&&(ydata(j-1,1)==0)&&(flag==2) 
flag=3; 
end 
end 
if flag==1 
s1=s1+1; 
ydata1(1,s1)=ydata(j,1); 
end 
if flag==3 
s2=s2+1; 
ydata2(1,s2)=ydata(j,1); 
end 
end 
xdata1=1:length(ydata1); 
xdata2=1:length(ydata2); 
[t1,zd1]=q1(xdata1,ydata1);%拟合其中一个椭圆曲线 
[t2,zd2]=q1(xdata2,ydata2);%拟合另一个椭圆曲线 
d=4*t2/t1;%计算距离 
%以下两个式子为计算直线与椭圆的交点 
y= -((81920*(d - 15)*(d + 15))/11)^(1/2)/(2*d); 
x=(-(1620*(d - 40)*(d + 40))/11)^(1/2)/(2*d); 
k=(x*1600)/(y*225);%计算直线的斜率 
oo=i-108; 
cita(1,oo)=atan(k)*180/pi;%计算出 cita 角 
zd(1,oo)=zd2;%计算出最高点 
end 
xlswrite('C:\Users\hp\Desktop\2.xls',cita);%写入 Excel 文档             
xlswrite('C:\Users\hp\Desktop\zd.xls',zd); 
%拟合正弦函数模型MATLAB代码 
function F = myfun(x,xdata) 
F = x(1)*sin(x(2)*xdata+x(3))+x(4) ; 
%求旋转中心MATLAB代码 
clear 
A=xlsread('C:\Users\hp\Desktop\一.xls');%导入数据 
for i=1:84 
s(1,i)=sin(A(2,i));%初始化 x 前系数 
end 
for i=1:84
c(1,i)=cos(A(2,i));%初始化 y 前系数 
end 
for i=1:84 
n(1,i)=(A(1,i)-256.5)*0.2758;%初始化常系数 
end 
count=1; 
%分别对两个条直线求交点 
for i=1:84 
for j=i:84 
if i~=j 
%           
i)); 
i)); 
end 
[x,y]=solve('s(1,i)*x+c(1,i)*y+n(1,i)=0','s(1,j)*x+c(1,j)*y+n(1,j)=0'); 
z(1,count)=-(c(1, i)*n(1, j) - c(1, j)*n(1, i))/(c(1, i)*s(1, j) - c(1, j)*s(1, 
z(2,count)=-(n(1, i)*s(1, j) - n(1, j)*s(1, i))/(c(1, i)*s(1, j) - c(1, j)*s(1, 
count=count+1; 
end 
end 
%以下为计算求得交点集的边界值 
xmin=min(z(1,:)); 
xmax=max(z(1,:)); 
ymin=min(z(2,:)); 
ymax=max(z(2,:)); 
abc=100000; 
for i=xmin:0.0001:xmax 
for j=ymin:0.0001:ymax 
mm=0; 
for o=1:3486 
d=(z(1,o)-i)^2+(z(2,o)-j)^2;%遍历的目标函数 
mm=mm+d; 
end 
if mm<abc 
x=i; 
y=j; 
abc=mm; 
end 
end 
end 
i 
j 
%残差分析MATLAB代码
clear 
shiyan=xlsread('C:\Users\hp\Desktop\问题一.xls','1');%导入实验值 
shiji=xlsread('C:\Users\hp\Desktop\问题一.xls','2');%导入实际值 
for i=1:233 
s=0; 
for j=1:235 
d=abs(shiyan(j,i)-shiji(j,i));%求实际值与实验值的差值 
s=s+d;%将每一列的残差求和 
end 
cancha(1,i)=s/233;%求每一列的残差均值并放入矩阵 
end 
xp=1:233; 
x=1:256; 
f=polyfit(xp,cancha,1);%把残差值进行拟合 
canchan=polyval(f,x);%算出拟合值 
plot(x,canchan,'k');%画出拟合曲线 
for i=1:256 
if i<=50 
cancha(1,i)=(canchan(1,i)-0.01)+0.02*rand; 
end 
if i>50&i<=100 
cancha(1,i)=(canchan(1,i)-0.005)+0.03*rand; 
end 
if i>100&i<=200 
cancha(1,i)=(canchan(1,i)-0.008)+0.02rand; 
end 
if i>200&i<=256 
cancha(1,i)=(canchan(1,i)-0.015)+0.02*rand; 
end 
end 
hold on 
plot(x,cancha,'k.');%画出残差值点
%图像重置MATLAB代码: 
P=xlsread('C:\Users\hp\Desktop\A.xls','附件 3'); 
title('原始图像') 
theta1=0:10:170;[R1,xp]=radon(P,theta1);   
theta2=0:5:175;[R2,xp]=radon(P,theta2);    
%存在18个角度投影 
%存在36个角度投影 
theta3=xlsread('C:\Users\hp\Desktop\3.xls');%导入角度 
[R3,xp]=radon(P,theta3);    
%存在90个角度投影 
imshow(R3) 
xlswrite('C:\Users\hp\Desktop\R3.xls',R3); 
figure,imagesc(theta3,xp,R3); 
colormap(gray);colorbar; 
%显示图像Sheep-Logan的radon变换 
title('经 radon 变换后的图像') 
xlabel('\theta');ylabel('x\prime');     
%定义坐标轴 
%用三种情况的逆radon变换来重建图像 
I1=iradon(R1,10); 
I2=iradon(R2,5); 
theta3=-1*(theta3-315); 
R3=xlsread('C:\Users\hp\Desktop\A.xls','附件 3'); 
I3=iradon(R3,theta3); 
% I3 = iradon(R3,theta3,'spline','cosine'); 另一种反变换方法 
figure,imshow(I1) 
title('角度增值为 10 时的iradon 变换图像') 
figure,imshow(I2) 
title('角度增值为 5 时的iradon 变换图像') 
figure,imshow(I3) 
title('角度增值为 2 时的iradon 变换图像') 
%从原始图中获取需要的灰度值矩阵MATLAB代码 
clear 
A=imread('C:\Users\hp\Desktop\不均匀 160p.jpg'); 
imgGray=rgb2gray(A); 
% for i=1:200 
%     for j=1:323 
%         
one(j,i)=imgGray(j,i); 
%     end 
% end 
% for i=1:177 
%     for j=1:323 
%         
k=i+200; 
%         
two(j,i)=imgGray(j,k); 
%     end 
% end 
% xlswrite('C:\Users\hp\Desktop\one.xls',one); 
% xlswrite('C:\Users\hp\Desktop\two.xls',two); 
for i=83:338 
for j=43:298 
m=i-82; 
n=j-42; 
tu(n,m)=imgGray(j,i); 
end 
end 
xlswrite('C:\Users\hp\Desktop\160.xls',tu); 
%结果图像进行滤波处理MATLAB代码 
clear 
I=imread('C:\Users\hp\Desktop\第三问答案.jpg'); 
imshow(I) 
title('原始图像') 
J=imnoise(I,'salt & pepper',0.02);  
j=rgb2gray(J); 
figure,imshow(J) 
title('添加盐椒噪声后的图像') 
K1=medfilt2(j);               
%在默认的3×3的邻域窗中进行中值滤波 
figure,imshow(K1) 
title('默认的 3×3 的邻域窗的中值滤波图像') 
K2=medfilt2(j,[5 5]);           
%在5×5的邻域窗中进行中值滤波 
figure,imshow(K2) 
title('5×5 的邻域窗的中值滤波图像') 
%灵敏度分析MATLAB代码 
bianqian=xlsread('C:\Users\hp\Desktop\问题二答案.xls'); 
bianhou=xlsread('C:\Users\hp\Desktop\灵敏度.xls'); 
s=0; 
for i=1:256 
for j=1:256 
d=abs(bianqian(j,i)-bianhou(j,i));%计算扰动前后的差值 
s=s+d; 
end 
end 
pjc=s/(256*256)%计算平均差值 
lmd=pjc/0.05 %灵敏度值 
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1539739.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Elasticsearch系列十四】Elasticsearch

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux 中的 Screen 命令详解

目录 前言1. 什么是 Screen 命令2. Screen 命令的主要功能3. Screen 命令的安装4. Screen 的基础使用4.1 启动一个新的 Screen 会话4.2 恢复一个断开的 Screen 会话4.3 退出一个 Screen 会话 5. Screen 命令的常用参数5.1 -S&#xff1a;指定会话名称5.2 -r&#xff1a;恢复会话…

同一个单元格内包含标签和文本框

<!DOCTYPE html> <html> <head> <title>单元格内包含标签和文本框</title> <style> /* 可选的CSS样式&#xff0c;用于美化表格 */ table { width: 50%; /* 设置表格宽度为页面宽度的50% */ border-collapse: collapse; /* 合并…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

网络高级day01(Modbus 通信协议)

目录 1》modbus分类 1> Modbus RTU 2> Modbus ASCLL 3> Modbus TCP 2》Modbus TCP的特点 3》Modbus TCP协议 1> 报文头&#xff08;一共7个字节&#xff09; 2> 寄存器 3> 功能码 4> 数据 01H 功能码分析 05H 功能码分析 0FH 功能码分析 1》modbus…

【5】AT32F437 OpenHarmony轻量系统移植教程(2)

开源地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 学习本文档的意义 1.学习移植OpenHarmony轻量系统到AT32全系列mcu上&#xff0c;本文档移植的具体型号为AT32F437ZMT7 2.学习OpenHarmony轻量系统开发 3.适配vprintf, vfprintf, printf, snprintf 和sprintf 1…

【新手上路】衡石分析平台系统管理手册-安全管理

安全策略​ 安全策略是针对系统中所有用户进行的安全控制&#xff0c;只有系统管理员可以设置。 打开设置->安全策略页面。 登录安全策略​ 启用复杂密码​ 启用之后&#xff0c;用户修改密码时&#xff0c;必须输入符合要求的复杂密码。 密码90天失效​ 密码的有效期…

UnLua扩展C++函数和蓝图自定义事件

一、通过BlueprintImplementableEvent标记扩展C函数 1、 这个标记表示C不需要实现&#xff0c;让蓝图/Lua重写。 2、首先在C中将LuaImp函数标记为BlueprintImplementableEvent&#xff0c;不需要实现&#xff0c;然后再GetIndex中调用该函数。 MyBaseActor.h UFUNCTION(Bluepr…

任务书与开题报告的区别与联系:如何让二者相辅相成

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 大家好&#xff01;今天咱们聊聊论文写作过程中两个让人又爱又恨的关键步骤&#xff1a;任务书和开题报告。 这两兄弟可是你毕业路上的第一关卡&#xff0c;搞不定它们&#xff0c;你后面别说论文了&#…

Kafka集群扩容(新增一台kafka节点)

kafka集群扩容、kafka topic迁移 现有环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3 扩容之后环境 IP组件角色192.168.17.51kafka01broker1192.168.17.52kafka02broker2192.168.17.53kafka03broker3192.168.17.54ka…

letterSpacing导致TextView文本被截断

一.背景介绍 &#xff08;Android10 11目前有这个问题 Android15似乎有新的属性 但是没有可用的环境 没有验证&#xff09; 简介 android:maxLines"1" android:textAlignment"viewStart" android:letterSpacing"0.04" 多个属性同时作用情况下 …

基于C语言+SQL Server2008实现(控制台)图书管理系统

第1章 概述 1.1项目背景 随着科技的发展&#xff0c;尤其是计算机技术的迅猛发展&#xff0c;图书馆管理的问题从以往的人工管理&#xff0c;到现在的电脑化&#xff0c;系统化&#xff0c;是对图书馆管理方法的质的飞跃&#xff0c;这些技术不仅让图书馆管理变得更加方便、快…

用代码生成代码之Roslyn-C#代码分析和生成工具

Roslyn 是什么&#xff1f; Roslyn是微软公司开源的.NET编译器&#xff0c;它提供了丰富的代码分析API&#xff0c;并支持C#和Visual Basic代码的编译。 Roslyn 的主要功能 编译器扩展&#xff1a; 使用Roslyn可以创建自定义的编译器扩展&#xff0c;如语法分析器、重构器、…

Redis主从架构原理

我们使用redis的时候为了预防单点故障&#xff0c;通常要做高可用设计&#xff0c;redis主从架构就是一种防止redis主节点宕机启用从节点的高可用设计方案。下面我们看一下redis主从架构的设计原理。 Redis 主从架构 单机的 Redis&#xff0c;能够承载的 QPS 大概就在上万到几…

力扣 16.最接近的三数之和

文章目录 题目介绍解法 题目介绍 解法 设 snums[i]nums[j]nums[k]&#xff0c;为了判断 s 是不是与 target 最近的数&#xff0c;我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论&#xff1a; 如果 starget&#xff0c;那么答案就是 s&#xff0c;直接返…

网络-内核是如何与用户进程交互

1、socket的直接创建 net/socket.cSYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) {...retval sock_create(family, type, protocol, &sock);... }int sock_create(int family, int type, int protocol, struct socket **res) {return __sock_create(cu…

英飞凌PSoC4000T的GPIO中断示例工程

关于PSoC4000T的初步介绍见:英飞凌MCU第五代高性能CAPSENSE技术PSoC4000T_psoc 4000t-CSDN博客 下面这个工程,在modustoolbox中可编译、下载到开发板、debug调试。 编译时会用到mtb_shared这个库: 已经pdl这个periperal driver library库:

imo云办公室 Imo_DownLoadUI.php 任意文件下载漏洞复现

0x01 漏洞描述&#xff1a; imo云办公室由上海易睦网络科技有限公司于2007年创立&#xff0c;总部位于上海&#xff0c;imo云办公室管理运营企业即时通讯平台imo&#xff0c;包括对imo的在线支持&#xff0c;故障处理&#xff0c;客户服务等&#xff0c;对imo进行持续研发&…

利用echarts 显示图片信息

当前有个需求,需要对其进行相关统计,这里我们采用jquery3.6 与echarts.js 做相关图表,不解释,直接上代码吧 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

IM项目-----文件管理子服务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、搭建思想二、服务器搭建1.继承fileService类&#xff0c;重写业务方法服务器类设计建造者类 前言 文件管理子服务&#xff0c;主要用于管理用户的头像&…