硕士论文用到的两段代码

该硕士论文涉及Matlab代码,包括计算图像中圆形区域内像素的灰度和RGB三通道值的均值,以及遍历红色通道权重以优化吸光度-浓度曲线。代码实现了对图像特定区域的处理,通过线性拟合评估不同红色通道权重下的曲线性能,如灵敏度、截距、最大值、线性范围和拟合优度等指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文中用到的两段代码

论文中使用到了两段代码分别用于圆形区域内像素灰度以及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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值