Qual é a melhor maneira de estimar a medida das coisas fotografadas?
Meu aplicativo deve estimar o comprimento (em milímetros) de um objeto usando moedas de euro como referência. Este é um exemplo de captura de tela:
Para obter o diâmetro da moeda fotografada, primeiro calculo a equação de um círculo que passa por esses 3 pontos da forma
x^2 + y^2 + ax + by + c = 0
e então eu tenho o diâmetro por
2 * square_root((a/2)^2 + (b/2)^2 -c)
.
Finalmente, posso executar a seguinte proporção para obter o comprimento da caneta vermelha:
/* length_estimated_pen (mm) : distance_green_pins (points) = real_diameter_coin (mm) : diameter_on_screen (points) */
let distanceGreen:Double = Double(sqrt(pow(self.greenLocationA.center.x - self.greenLocationB.center.x, 2.0) + pow(self.greenLocationA.center.y - self.greenLocationB.center.y, 2.0)))
let estimatedMeasure:Double = (distanceGreen * Double(ChosenMeter.moneyDiameter)) / diameter
onde emChosenMeter.moneyDiameter
é armazenado o diâmetro real da moeda escolhida como referência (clicando em um dos 3 botões abaixo).
Eu preciso trabalhar comDouble
ao invés deCGFloat
Porqueesta O tutorial para resolver um sistema de equações lineares (para obter o coeficiente a, b, c da equação circular) funciona com Double.
O problema é o comprimento estimado da caneta vermelha é sempre superestimado em mais de 10 mm. Acho que devo aplicar um fator de correção ou complicar o cálculo levando em consideração outros fatores, mas quais? Você pode me dar algumas dicas? Qualquer ajuda seria útil para mim.