硕士论文Matlab代码
论文中用到的两段代码
论文中使用到了两段代码分别用于圆形区域内像素灰度以及RGB三通道值均值计算以及遍历红色通道值权重优化吸光度-浓度曲线仅用于学习,请勿抄袭。
圆形区域内像素灰度以及RGB三通道值均值计算
代码如下:
clc;clear;
close all;
picOri = imread('F:\sampleDatas\1111\IMG_20230422_213458.jpg');
[H_Pic,W_Pic,C_Pic]=size(picOri);
picDou=double(picOri);
fprintf('Width of Pic is : %d \n',W_Pic);
fprintf('Height of Pic is : %d \n',H_Pic);
fprintf('#######################\n');
%% center and size
centerX=2028; %input('X cord of center : ');
centerY=1503; %input('Y cord of center : ');
Radius=30; %input('Radius of circle : ');
XO=centerX;
YO=centerY;
M_x=2*Radius;
M_y=2*Radius;
picMod=zeros(M_y,M_x);
matrixR=zeros(M_y,M_x);
matrixG=zeros(M_y,M_x);
matrixB=zeros(M_y,M_x);
center_RU=[XO+1 YO];
center_LU=[XO YO];
center_RB=[XO+1 YO+1];
center_LB=[XO YO+1];
%% 4 parts of modified pic
% part LU
for i=1:Radius % row num of picMOD
for j=1:Radius % col num of picMOD
if ((Radius-i)^2+(Radius-j)^2<=Radius^2)
pR=picDou(i+center_LU(1,2)-Radius,j+center_LU(1,1)-Radius,1);
pG=picDou(i+center_LU(1,2)-Radius,j+center_LU(1,1)-Radius,2);
pB=picDou(i+center_LU(1,2)-Radius,j+center_LU(1,1)-Radius,3);
matrixR(i,j)=pR/255;
matrixG(i,j)=pG/255;
matrixB(i,j)=pB/255;
picMod(i,j)=(pR*0.299+pG*0.587+pB*0.114)/255;
else
matrixR(i,j)=0;
matrixG(i,j)=0;
matrixB(i,j)=0;
picMod(i,j)=0;
end
end
end
% Part RU
for i=1:Radius
for j=Radius+1:M_x
if ((Radius-i)^2+(j-Radius-1)^2<=Radius^2)
pR=picDou(i+center_RU(1,2)-Radius,j+center_RU(1,1)-Radius-1,1);
pG=picDou(i+center_RU(1,2)-Radius,j+center_RU(1,1)-Radius-1,2);
pB=picDou(i+center_RU(1,2)-Radius,j+center_RU(1,1)-Radius-1,3);
matrixR(i,j)=pR/255;
matrixG(i,j)=pG/255;
matrixB(i,j)=pB/255;
picMod(i,j)=(pR*0.299+pG*0.587+pB*0.114)/255;
else
matrixR(i,j)=0;
matrixG(i,j)=0;
matrixB(i,j)=0;
picMod(i,j)=0;
end
end
end
% Part LB
for i=Radius+1:M_y
for j=1:Radius
if ((i-Radius-1)^2+(Radius-j)^2<=Radius^2)
pR=picDou(i+center_LB(1,2)-Radius-1,j+center_LB(1,1)-Radius,1);
pG=picDou(i+center_LB(1,2)-Radius-1,j+center_LB(1,1)-Radius,2);
pB=picDou(i+center_LB(1,2)-Radius-1,j+center_LB(1,1)-Radius,3);
matrixR(i,j)=pR/255;
matrixG(i,j)=pG/255;
matrixB(i,j)=pB/255;
picMod(i,j)=(pR*0.299+pG*0.587+pB*0.114)/255;
else
matrixR(i,j)=0;
matrixG(i,j)=0;
matrixB(i,j)=0;
picMod(i,j)=0;
end
end
end
% Part RB
for i=Radius+1:M_y
for j=Radius+1:M_x
if ((i-Radius-1)^2+(j-Radius-1)^2<=Radius^2)
pR=picDou(i+center_RB(1,2)-Radius-1,j+center_RB(1,1)-Radius-1,1);
pG=picDou(i+center_RB(1,2)-Radius-1,j+center_RB(1,1)-Radius-1,2);
pB=picDou(i+center_RB(1,2)-Radius-1,j+center_RB(1,1)-Radius-1,3);
matrixR(i,j)=pR/255;
matrixG(i,j)=pG/255;
matrixB(i,j)=pB/255;
picMod(i,j)=(pR*0.299+pG*0.587+pB*0.114)/255;
else
matrixR(i,j)=0;
matrixG(i,j)=0;
matrixB(i,j)=0;
picMod(i,j)=0;
end
end
end
%% mean value of gray and RGB
[row,col]=size(picMod);
cnt=0;totalBlue=0;totalGreen=0;totalRed=0;totalGray=0;
for ii=1:row
for jj=1:col
if picMod(ii,jj)~=0
cnt=cnt+1;
totalGray=totalGray+picMod(ii,jj);
end
end
end
meanGray=totalGray/cnt;
% figure(1);
% surf(picMod)
cnt=0;
fprintf('Mean gray of Pic is : %6.5f \n',meanGray);
for ii=1:row
for jj=1:col
if matrixR(ii,jj)~=0
cnt=cnt+1;
totalRed=totalRed+matrixR(ii,jj);
end
end
end
meanR=totalRed/cnt;
% figure(2);
% surf(matrixR)
cnt=0;
fprintf('Mean Red of Pic is : %6.5f \n',meanR);
for ii=1:row
for jj=1:col
if matrixG(ii,jj)~=0
cnt=cnt+1;
totalGreen=totalGreen+matrixG(ii,jj);
end
end
end
meanG=totalGreen/cnt;
% figure(3);
% surf(matrixG)
fprintf('Mean Green of Pic is : %6.5f \n',meanG);
cnt=0;
for ii=1:row
for jj=1:col
if matrixB(ii,jj)~=0
cnt=cnt+1;
totalBlue=totalBlue+matrixB(ii,jj);
end
end
end
meanB=totalBlue/cnt;
% figure(4);
% surf(matrixB)
fprintf('Mean blue of Pic is : %6.5f \n',meanB);
%% image show and write chosen solid
% invert colors
% figure(1)
% picInv=ones(size(picMod))-picMod;
% imshow(picInv,[])
% figure(2)
% imshow(picMod,[])
%% mean of gamma
% [row,col]=size(picInv);
% num=0;totalGray=0;
% for ii=1:row
% for jj=1:col
% if picInv(ii,jj)~=1
% num=num+1;
% totalGray=totalGray+picInv(ii,jj);
% end
% end
% end
% meanG=totalGray/num;
% fprintf('Mean gray of Pic is : %6.5f \n',meanG);
%% append the data to 00data_Grey.txt
% fID=fopen("00data_Grey.txt","a");
% fprintf(fID,"%6.5f \n",meanG);
% fclose(fID);
遍历红色通道值权重优化吸光度-浓度曲线
代码如下:
clc;clear;
rg=[r0 g0;
r1 g1;
r2 g2;
r3 g3;
r4 g4;
r5 g5;
];%0~5mg/L透射光强图像中红色和绿色通道归一化均值
fac=[0:0.01:1;
1:-0.01:0];
Gray=rg*fac;
inGray=ones(size(Gray))-Gray;
con=[0 1 2 3 4 5];
KB=zeros(101,6);
y=zeros(size(con));
Dx=zeros(101);
Dy=zeros(101);
CovXY=zeros(101);
for i=1:101
sst=0;sse=0;
y=inGray(:,i)';
x=con;
kb=polyfit(x,y,1);%线性拟合
KB(i,1)=kb(1);
KB(i,2)=kb(2);
xbar=mean(x);
ybar=mean(y);
for j=1:6
sst=sst+(y(j)-ybar)^2;
sse=sse+(y(j)-(kb(1)*x(j)+kb(2)))^2;
end
m=cov(x,y);
CovXY(i)=m(2);
Dx(i)=std(x);
Dy(i)=std(y);
rio=CovXY(i)/(Dx(i)*Dy(i));%相关系数
rSquare=1-sse/sst;%拟合优度
KB(i,3)=rio;
KB(i,4)=rSquare;
KB(i,5)=kb(1)*5+kb(2);
KB(i,6)=kb(1)*5;
%reset parameter
y=zeros;
end
%% 图像绘制
figure
grid on
xx=(0:100)/100;
plot(xx,KB(:,1))
hold on
yyaxis left
plot(xx,KB(:,2))
plot(xx,KB(:,5))
plot(xx,KB(:,6))
yyaxis right
plot(xx,KB(:,3))
plot(xx,KB(:,4))
ylim([0.96 1])
legend('灵敏度','截距','最大值','线性范围','相关系数','拟合优度')
hold off