firelab-general/matlab-version/ratio-pyrometry.m

54 lines
1.7 KiB
Matlab
Raw Normal View History

2022-10-12 12:14:13 -07:00
B = imread("/Users/michael/Projects/firelab-general/examples/01-0001-cropped.png");
nrows = height(B);
ncolumns = width(B);
rdc = 7.7; % This, and the next 2 terms, are dark current values.
gdc = 11.5; % Theyre representative for a single camera orientation,
bdc = 4.4; % but theyre negligible in general.
GSdc = (rdc+gdc+bdc)/3;
iso = 64;
t = 0.5;
f = 2.4;
rawred = double(B(:,:,1));
rawgreen = double(B(:,:,2));
rawblue = double(B(:,:,3));
rawblue(rawblue > 65534) = 0;
rawGS = double(rgb2gray(B));
normred = ((rawred-rdc)*(f^2))/(iso*t);
normgreen = ((rawgreen-gdc)*(f^2))/(iso*t);
normblue = ((rawblue-bdc)*(f^2))/(iso*t);
GR = normgreen./normred; % Green-to-Red normalized pixel ratio
GR2 = log10(GR); % Log-base-10 of above ratio
GR2(imag(GR2) > 0) = 0; % Removes any imaginary entries
logGR = GR2; % Redefinition for calculations
%% Application of ratio pyrometry curve fit
RT = (362.73.*(logGR.^3) + 2186.7.*(logGR.^2) + 4466.5.*(logGR) + 3753.5); % New Camera Ratio Temp
%% Removal of 600-1200 range (Ratio)
RT(RT < 600 | RT > 1200) = 0; % BB Calibration Temperature range
%% 50% rule (Ratio)
RT2 = RT; % This section and below apply a noise reduction algorithm
% - if 50% of pixels around each pixel are 0, set that pixel to 0 as well
for i = 4:(nrows-4)
for j = 4:(ncolumns-4)
if nnz(RT(i-3:i+3,j-3:j+3)) < 25
RT2(i,j) = 0;
else
RT2(i,j) = RT(i,j);
end
end
end
%% MATLAB display
RT3=RT2; % Left in b/c some images need to be flipped for proper
% display - to do this, the command would instead be "RT3 = flip(RT2)
RatioAverageTemp = mean(nonzeros(RT3)); % Average surface temperature
Pixel = nnz(RT3); % Temp pixel count, to contextualize