Skip to main content
. 2022 Dec 6;22(23):9551. doi: 10.3390/s22239551
Algorithm A1: Synthesis and training of the correlation neuron
Initiate C-, C+, AUCMAX, b
//Select an array Ψ of random pairs of features (not involved in any neuron)
//with a cross-correlation level of more than C- but less than C+
for ι from 1 to η do Ψ[ι] = GetRandomUniqueFeaturesPair(C-; C+) end
p = 0.9
//Calculation of an array W of neurons’ weight coefficients using Formula (18)
//Calculation of meta-features is performed according to Formula (12)
for ι from 1 to η do W[ι] = GetSynapsesWeights(Ψ[ι], p) end
//Calculation of arrays YG and YI of neuron responses
//to «Genuine» and «Impostors» training images according to Formula (17)
for k from 1 to KG do YG[k] = GetNeuronResponse(āG,k, Ψ, W, p) end
for k from 1 to KI do YI[k] = GetNeuronResponse(āI,k, Ψ, W, p) end
ξG = GetMathematicalExpectation(YG)
ςG = GetStandardDeviation(YG, ξG)
ξI = GetMathematicalExpectation(YI)
ςI = GetStandardDeviation(YI, ξI)
yImin = ξI − 4ςI
yImax = ξI + 4ςI
ΔyG = 4ςG
yGmin = ξG ΔyG
yGmax = ξG + ΔyG
FGmax = F(yGmax)//Formula (21)
FGmin = F(yGmin)//Formula (21)
ΔFG = FGmax − FGmin
if AUCMAX > AUC(ՓG(y), ՓI(y)) then//Formula (22)
do
if ΔFG < 0.4 then
  do
  while ΔFG < 0.1
   do
   ΔyG = 1.05ΔyG
    yGmin = ξG ΔyG
   yGmax = ξG + ΔyG
    FGmax = F(yGmax)//Formula (21)
    FGmin = F(yGmin)//Formula (21)
   ΔFG = FGmax-FGmin
   end
  if FGmin < 0.1 then
   if 1 − FGmax > 0.6 then
    do
     ɸG = 3
     Tleft = yGmax
     ΔT = (yImax − yGmax)/4
     Tmiddle = Tleft + ΔT
     Tright = Tmiddle + ΔT
    H = GetHashTransformationNumber(ɸG, b)
    return {H, Ψ, W, Tleft, Tmiddle, Tright}
    end
   else
    return NULL//Neuron is not trained and must be removed
  else
   if FGmin > 0.4 then
    if 1 − FGmax < 0.1 then
     if 1 − FGmin < 0.4 then
      do
       ɸG = 0
       ΔT = (yGmin − yImin)/4
       Tleft = yGmin − 2ΔT
       Tmiddle = yGmin − ΔT
       Tright = yGmin
       H = GetHashTransformationNumber(ɸG, b)
       return {H, Ψ, W, Tleft, Tmiddle, Tright}
       end
    else
       return NULL//Neuron is not trained and must be removed
   else
    do
     ɸG = 1
     ΔT = (yGmin − yImin)/3
     Tleft = yGmin − ΔT
     Tmiddle = yGmin
     Tright = yGmax
    H = GetHashTransformationNumber(ɸG, b)
    return {H, Ψ, W, Tleft, Tmiddle, Tright}
    end
    else
       do
        ɸG = 2
        ΔT = (yImax-yGmax)/3
        Tleft = yGmin
        Tmiddle = yGmax
        Tright = Tmiddle + ΔT
       H = GetHashTransformationNumber(ɸG, b)
       return {H, Ψ, W, Tleft, Tmiddle, Tright}
      end
  end
else
  return NULL//Neuron is not trained and must be removed
end
else
return NULL//Neuron is not trained and must be removed