Exemplos do ImageMagick -- Correção de Lente
- Prefácio e Índice dos Exemplos do ImageMagick
- Introdução à Correção de Lente
- Restrição de Não Escalonamento
- Conjuntos de Parâmetros Prontos
- Calibração do Zero
- Abordagem Básica
- Determinando conjuntos de parâmetros de lente com o Hugin
- Definindo conjuntos de pontos
-
Reconstruindo parâmetros a partir da miniatura criada pela câmera
Exemplo Exemplo do Teclado (por El-Supremo)
Correção da Distorção de Lente (PDF) Ao tirar fotografias, as imagens geradas são de fato distorcidas tanto por efeitos de lente quanto por efeitos de perspectiva esférica. Ao utilizar fotos, geralmente é necessário corrigir esses efeitos, e é isso que será abordado nesta seção. A maior parte desta página foi contribuída por Wolfgang Hugemann.
Introdução à Correção de Lente
Lentes olho de peixe e lentes grande-angulares de baixo custo (ou melhor, lentes de zoom ajustadas para distância focal curta) normalmente produzem uma distorção em barril acentuada. No entanto, essa distorção pode, em grande parte, ser corrigida aplicando-se transformações algorítmicas adequadas à fotografia digital. Um dos algoritmos de correção de lente mais utilizados, introduzido pelo Panorama Tools e usado pelo PTlens, também é oferecido pelo ImageMagick, como Método de Correção de Distorção em Barril. Nesta abordagem do problema, a distorção é controlada por quatro parâmetros de transformação a, b, c, d, que precisam ser escolhidos criteriosamente para corrigir a distorção produzida por uma lente específica (ou melhor, por uma câmera com zoom ajustada para uma determinada distância focal). Dificilmente se encontram valores adequados para esses parâmetros por tentativa e erro. A seguir, descrevemos como determinar de forma eficaz os parâmetros de correção de lente deste modelo usando o Hugin, uma interface gráfica de usuário livre para o Panorama Tools, disponível para vários sistemas operacionais. Se não quiser lidar com os detalhes da correção de lente, você pode pular o restante desta página e simplesmente comprar o PTlens, que oferece correção de lente sofisticada para um vasto número de câmeras digitais e lentes a um preço razoável (graças à sua ampla base de dados de lentes). Atualmente, algumas câmeras digitais (como a Nikon P7000) até incorporam a correção de lente em suas etapas internas de processamento de imagem. Para fotografias tiradas com câmeras que não oferecem essa possibilidade, o ImageMagick permite integrar a correção de lente como uma etapa de um script de processamento de imagem maior. O texto a seguir é uma versão resumida do artigo Correção da Distorção de Lente (PDF) (que trata de aplicações na reconstrução de acidentes). As explicações aqui apresentadas seguem uma abordagem mais prática, concentrando-se nas formas de obter os parâmetros de correção de lente adequados.
Restrição de Não Escalonamento
Como descrito nas Distorções em Barril, a distorção em barril é definida pela fórmula matemática
R = ( a * r^3 + b * r^2 + c * r + d ) * r
com r sendo a distância até o centro geométrico da imagem da fotografia digital e R sendo o raio equivalente na imagem original. Como sempre acontece com esse tipo de mapeamento, a equação acima define uma espécie de "função de consulta de cor", ou seja, onde buscar a cor do pixel no raio r. Os raios r e R são normalizados pela metade da menor dimensão da imagem (isto é, normalmente a altura da imagem), de modo que r = R = 1 para os pontos médios das bordas superior e inferior da imagem. Ao corrigir fotografias digitais, devemos prestar atenção à restrição de não escalonamento
a + b + c + d = 1
o que obviamente resulta em R = 1 para r = 1. O Panorama Tools calcula o parâmetro d a partir dos demais parâmetros por meio de
d = 1 - a - b - c
restando três parâmetros livres no modelo, de modo que o parâmetro d costuma ser omitido. O ImageMagick calcula d automaticamente pela restrição de não escalonamento, caso seja omitido. Assim, uma linha de comando típica do ImageMagick para correção de lente teria mais ou menos esta forma
magick input.jpg -distort barrel '0.06335 -0.18432 -0.13008' output.jpg
deixando o cálculo de d a cargo do ImageMagick. O método de correção de lente do Panorama Tools de que tratamos aqui pressupõe que o eixo óptico da lente e o centro da imagem sejam idênticos, o que, na prática, não ocorre de forma rigorosa (devido a tolerâncias de fabricação). Além disso, ele desconsidera efeitos como a distorção em bigode. Ainda assim, na prática ele parece funcionar com uma precisão surpreendente.
Como demonstra a curva (a = 0.05, b = -0.25, c = 0.05), essa relação costuma ser usada no intervalo de 0 a 1.5 (proporção 3:2), passa pelos pontos (0,0) e (1,1) e deve ser decrescente para r > 1.
Conjuntos de Parâmetros Prontos
A base de dados de lentes atual do PTlens, que é a "medula" do programa, é criptografada e só pode ser lida pelo próprio PTlens. Até fevereiro de 2006, no entanto, a base de dados do PTlens era codificada em formato XML, ou seja, um formato de texto facilmente editável. Essa versão de 2006 da base de dados XML do PTlens ainda está (legalmente) disponível no site do Hugin no SourceForge e fornece dados para muitos modelos de câmera mais antigos. Quando a base de dados do PTlens passou a ser criptografada, os autores do Hugin tentaram estabelecer, como alternativa, uma base de dados de lentes livre codificada em XML. Essa base de dados chama-se LensFun e pode ser baixada. Ela vem com uma interface de programação completa, mas basicamente tudo o que você precisa é da informação da sua câmera no arquivo XML. Como exemplo, os parâmetros de correção de lente para a antes popular Nikon Coolpix 995 encontram-se no arquivo compact-nikon.xml, que fica no diretório \data\db. O arquivo pode ser examinado com um editor de texto ou um visualizador de XML:
<lens>
<maker>Nikon</maker>
<model>Standard</model>
<mount>nikon995</mount>
<cropfactor>4.843</cropfactor>
<calibration>
<distortion model="ptlens" focal="8.2" a="0" b="-0.019966" c="0" />
<distortion model="ptlens" focal="10.1" a="0" b="-0.010931" c="0" />
<distortion model="ptlens" focal="13.6" a="0" b="-0.002049" c="0" />
<distortion model="ptlens" focal="18.4" a="0" b="0.003845" c="0" />
<distortion model="ptlens" focal="23.4" a="0" b="0.006884" c="0" />
<distortion model="ptlens" focal="28.3" a="0" b="0.008666" c="0" />
<distortion model="ptlens" focal="31" a="0" b="0.009298" c="0" />
</calibration>
</lens>
Como se pode extrair da ficha técnica da câmera, a faixa de zoom da Nikon Coolpix 995 é de 8.2 – 31.0 mm, correspondendo a 38 – 152 mm em câmeras de filme de 35 mm. Isso resulta em um fator de corte de 152 / 31 = 4.90, que corresponde aproximadamente ao 4.843 indicado no arquivo XML. Os coeficientes da correção por distorção em barril são fornecidos para seis distâncias focais, a saber, 8.2 mm, 10.1 mm, 13.6 mm, 18.4 mm, 23.4 mm, 28.3 mm e 31.0 mm. Os coeficientes a e c, para esta lente, estão definidos como zero, ou seja, a distorção é descrita apenas pelo termo de segunda ordem b. Observe que muitas lentes também terão valores para os parâmetros a e c, e estes também devem ser interpolados de maneira semelhante. Se tivermos uma fotografia DSCN0001.jpg tirada com uma Nikon Coolpix 995 ajustada para a distância focal mais curta, essa fotografia poderia ser corrigida pelo ImageMagick via
magick DSCN0001.jpg -distort barrel '0.0 -0.019966 0.0' DSCN0001_pt.jpg
(A extensão de nome de arquivo _pt é usada pelo PTlens para marcar imagens corrigidas.) Para as seis distâncias focais fornecidas, o coeficiente de correção b pode ser lido do arquivo XML. Para outras distâncias focais, o valor adequado pode ser determinado por interpolação entre as duas distâncias focais vizinhas. Como alternativa, a dependência de b em relação à distância focal f pode ser aproximada pelo polinômio
b = 0.000005142 * f^3 - 0.000380839 * f^2 + 0.009606325 * f - 0.075316854
Assim, a distância focal (lida da informação EXIF) é usada para calcular o parâmetro de correção de lente b na primeira etapa e, em seguida, numa segunda etapa, a correção de lente (isto é, a distorção em barril) é realizada usando esse valor como parâmetro b. A seção sobre Windows mostra um Exemplo em VBScript no qual as equações acima são usadas, com a distância focal sendo extraída de uma fotografia da Nikon Coolpix 995 via magick identify.
Calibração do Zero
Abordagem Básica
Ao determinar os parâmetros da lente, todos os programas se baseiam no mesmo paradigma: o mapeamento de perspectiva ideal deve mapear linhas retas do mundo real para linhas retas na imagem. Portanto, se um conjunto de pontos do mundo real P0, P1, ..., Pn sabidamente está sobre uma linha reta, suas imagens p0, p1, ..., pn também devem cair sobre uma linha reta. Qualquer desvio dessa regra deve ser atribuído à distorção da lente. Precisamos de dois pontos para determinar os dois parâmetros que definem uma linha reta (por exemplo, a inclinação e a interseção com o eixo y). Cada ponto adicional fornecido oferece outra equação para determinar os parâmetros de correção de lente. Assim, se a nossa abordagem funcional tiver apenas um parâmetro livre b (como no caso da Nikon Coolpix 995 acima), teríamos que fornecer pelo menos três pontos sobre uma linha reta do mundo real e sua imagem para determinar o parâmetro de correção de lente b buscado. De forma mais concreta: o modelo de distorções usa apenas o parâmetro b, ou seja, as coordenadas da imagem corrigida X1, Y1 podem ser calculadas a partir das coordenadas da fotografia digital por
r = s * sqrt(x1^2 + y1^2)
X1 = [(1-b) + b r^2] * x1
Y1 = [(1-b) + b r^2] * y1
Y1 = k1 * X1 + k2
Isso resulta em uma equação para cada ponto fornecido sobre a mesma linha reta
[(1-b) + b r^2] * y1 = k1 * [(1-b) + b r^2] * x1 + k2
with: r = s * sqrt(x1^2 + y1^2)
Assim, três pontos do mundo real e seus pontos de imagem correspondentes bastariam para determinar os parâmetros que descrevem a linha reta e a distorção da lente k1, k2, b. Na prática, as coordenadas dos pontos do mundo real raramente são conhecidas, de modo que é necessário mais do que apenas três pontos para determinar os parâmetros buscados. A maioria dos softwares de calibração usa uma grade retangular de linhas retas (muitas vezes um tabuleiro de xadrez) para gerar um conjunto de equações e então calcular os parâmetros de mapeamento por um ajuste não linear de mínimos quadrados. Alguns programas geram por conta própria o conjunto de pontos de controle, frequentemente usando modelos predefinidos; outros programas exigem que o usuário selecione os pontos de controle na imagem de calibração.
Determinando conjuntos de parâmetros de lente com o Hugin
A seguir, demonstraremos como determinar um conjunto de parâmetros de correção de lente usando o Hugin. Há também um "Simple Lens Calibration Tutorial" pronto no site do Hugin, mas, no momento em que isto foi escrito (2014), ele parece simples demais para fornecer parâmetros confiáveis que possam depois ser usados para uma infinidade de correções. Antes de tudo, é preciso obter um padrão de teste adequado. Basicamente, um padrão de tabuleiro de xadrez com cerca de 10 × 7 quadrados, impresso em ISO 216 A3 ou similar, serve e é frequentemente usado. Já as lentes de zoom de baixo custo (as chamadas lentes varifocais) devem ser ajustadas para foco no infinito durante a calibração, pois sua verdadeira distância focal pode diferir bastante daquela embutida no EXIF para foco próximo. Para lentes de foco fixo, você também pode usar um padrão de teste em tabuleiro de xadrez, o que é especialmente recomendável ao calibrar uma lente olho de peixe, já que pode ser difícil encontrar um objeto do mundo real grande o suficiente para cobrir seu campo de visão. Portanto, especialmente ao calibrar lentes de zoom / câmeras com zoom, é preferível fotografar um edifício moderno, como proposto no site do PTlens. Siga as instruções ali fornecidas. As fotografias podem apresentar distorção de perspectiva:
![[IM Output]](../static/img/img_photos/building_1.gif)
perspectiva | ![[IM Output]](../static/img/img_photos/building_2.gif)
sem perspectiva
---|---
Inicie o Hugin, clique no botão 'Add images ...' na primeira aba e abra a imagem de calibração. (Veja em hugin.sourceforge.net uma captura de tela da interface do Hugin.) Na parte inferior da aba, defina 'Optimise' como 'Custom parameters' (o que adicionará uma nova aba chamada 'Optimiser', que de outra forma não apareceria). Na aba 'Stitcher', defina 'Projection' como 'Rectilinear'. Na aba 'Control Points', você vê sua fotografia de teste duas vezes e pode definir conjuntos de pontos que estão sobre a mesma linha reta selecionando esses grupos de pontos em ambas as versões da fotografia.
Mas não escolha exatamente os mesmos pontos em ambas as versões, de modo que os pontos sejam idênticos nas duas imagens, pois isso induziria o otimizador a tomar o caminho fácil e determinar os parâmetros de uma correspondência um para um. Em vez disso, é preferível escolher pontos diferentes sobre a mesma linha nas duas versões da imagem. Para fins de teste, você pode definir alguns desses conjuntos de pontos, de preferência perto das bordas da imagem, onde as linhas retas estão mais distorcidas. Você perceberá que definir esses conjuntos de pontos no Hugin é uma tarefa bastante tediosa (o que talvez seja uma das razões de a base de dados do lensfun ser tão pequena).
Em seguida, mude para a aba 'Optimiser' e escolha os parâmetros a otimizar clicando com o botão esquerdo do mouse enquanto mantém a tecla ctrl pressionada. (Veja a dica no topo da aba.) Eu recomendaria otimizar 'Yaw(y)', 'Pitch (p)' e os parâmetros de lente 'a', 'b' e 'c'. O campo de visão horizontal 'Hfov (f)' é calculado a partir dos dados EXIF da imagem de teste, usando a entrada FocalLengthIn35mmFilm f:
Hfov = 2 × arctan (18 mm / f)
sendo 18 mm a metade da largura de um negativo de 35 mm (que mede 36 × 24 mm). Em seguida, pressione o botão 'Optimize now!'. Os parâmetros resultantes 'a', 'b' e 'c' devem ficar abaixo de 0.01 para lentes grande-angulares e abaixo de 0.1 para lentes olho de peixe. Se os valores forem maiores, a otimização provavelmente falhou. Nesse caso, verifique os conjuntos de pontos na aba 'Control Points': os pontos de controle provavelmente estão fora de ordem ou não estão corretamente associados às suas respectivas linhas. O otimizador também parece ser sensível ao conjunto inicial (matematicamente falando: o vetor inicial) fornecido, ou seja, definir todos os parâmetros como zero pode ser a escolha errada. Você pode editar o vetor inicial dando um duplo clique nos valores da aba 'Optimiser' ou ativando a caixa de seleção 'Edit script before optimising' no canto inferior direito da aba. Isso abrirá uma caixa de texto antes da otimização, que permitirá editar a seção correspondente do arquivo de projeto do Hugin. Redefina o vetor inicial a, b, c para a0.0 b0.0 c0.0 (ou outros valores adequados) antes de reiniciar o otimizador. A experiência mostra que pode ajudar definir 'a' com algum valor positivo, especialmente para lentes olho de peixe. Para uma câmera equipada com lente fixa, essa calibração é feita uma vez para sempre. Para uma câmera com lente de zoom, é preciso cobrir toda a faixa de distâncias focais calibrando em cerca de cinco distâncias focais diferentes. Depois de determinar tal conjunto de parâmetros, teste-o no ImageMagick via
magick calibration_image.jpg -distort barrel '_a b c_ ' flat.jpg
substituindo os valores _a b c_ pelos que acabou de determinar. As linhas na imagem de saída devem estar perfeitamente retas; caso contrário, a otimização falhou e precisa ser realizada com um vetor inicial diferente ou um conjunto de pontos de controle corrigido.
Definindo conjuntos de pontos
Para uma calibração séria, é recomendável editar manualmente o arquivo de projeto do Hugin e definir as coordenadas dos pontos e os conjuntos de pontos por outros meios. O arquivo de projeto é um arquivo de texto puro com a extensão PTO; você pode abri-lo com um editor de texto simples e fornecer uma lista de pontos. Uma única linha na sua seção # control points tem esta aparência:
c n0 N0 x175.0 y87.8 X1533.3 Y62.6 t3
onde x, y são as coordenadas de pixel na imagem de origem (imagem à esquerda na aba) e X, Y são as coordenadas de pixel na imagem de destino (imagem à direita na aba) – que, neste caso especial, são na verdade duas versões da mesma imagem. (Normalmente seriam duas imagens diferentes colocadas lado a lado em um panorama.) O prefixo c n0 N0 é um código padrão e o sufixo t3 é a numeração da linha reta associada, começando pelo índice 3. Como se pode ver no exemplo acima, as coordenadas de pixel podem ter partes fracionárias. É claro que x, y e X, Y precisam estar sobre a mesma linha reta. No entanto, não devem ser idênticas, pois o otimizador se recusaria a funcionar nesse caso (veja acima). A maneira mais fácil de garantir isso é usar os mesmos pontos em ambas as imagens, mas com a ordem invertida para as coordenadas de destino, por exemplo, usar p1, p2, p3, p4 na imagem à esquerda e P4, P3, P2, P1 na da direita. Determine as coordenadas de pixel na imagem de origem com uma ferramenta de seleção de pontos. Você pode usar qualquer visualizador de imagens para isso, especialmente um que possa armazenar esses dados. Uma ferramenta independente de plataforma para isso seria o Fiji. Eu (trabalhando no Windows) usei polilinhas no WinMorph para fazê-lo. Você deve seguir uma estratégia predefinida ao selecionar os pontos, por exemplo, escolher o mesmo número de pontos em cada linha (mais ou menos) horizontal, indo da esquerda para a direita (isto é, seguir uma linha em zigue-zague por toda a imagem, como o feixe de raios catódicos em um tubo de TV). Tal estratégia simplificará a ordenação das coordenadas dos pontos de destino. As linhas do arquivo de texto que definem as coordenadas dos pontos de origem e de destino podem então ser estabelecidas manualmente ou por meio de uma ferramenta de software. (Eu uso uma sub-rotina VBA do Excel para realizar essa tarefa.) Quando estiver pronto, copie a lista de pontos para a seção correspondente do arquivo PTO, salve-o e reabra-o com o Hugin. O resultado deve ter esta aparência:
![[IM Output]](../static/img/img_photos/hugin.jpg)
Grade de pontos de controle no Hugin
Um exemplo pronto, tanto com uma imagem de calibração quanto com o projeto correspondente do Hugin, é fornecido no arquivo ZIP olympus_c2500l.zip. Reconstrução a partir da miniatura criada pela câmeraHá vários casos em que já temos um par de imagens, uma com distorção em barril e a outra já corrigida. Essa correção pode ter sido feita com algum outro software de correção de lente, que não nos informa os parâmetros de correção. Além disso, muitas câmeras contemporâneas (2019) oferecem realizar a correção de lente internamente para imagens JPEG. No entanto, essa funcionalidade normalmente não é aplicada a imagens RAW. (Bem, é raw.) Ainda assim, a imagem RAW contém uma pré-visualização JPEG à qual a correção já foi aplicada pela câmera. O ImageMagick pode ler imagens RAW usando o dcraw. Assim, pode-se converter com magick a imagem raw para JPEG sem correção de lente e comparar o resultado com a miniatura JPEG corrigida internamente. No caso de tal par de imagens, os parâmetros de correção podem ser calculados de forma direta. Selecionando pares de pontos correspondentes em ambas as imagens, podemos estabelecer diretamente a relação entre r e R. ![[RAW Image]](../static/img/lens/raw_marks.jpg)
Imagem Raw (com distorção em barril) ![]()
Miniatura Corrigida (a reconstruir) |
---|---
Como mostra o exemplo acima, temos liberdade para escolher quais pares de pontos usar; estes não precisam seguir linhas retas nem mesmo estar sobre padrões geométricos. Basta preencher uma tabela com os valores correspondentes de r e R e então calcular uma curva de regressão, por exemplo por meio de um diagrama de planilha.
![[Calabration]](../static/img/lens/calibration_points.gif)
Pontos de Calibração | ![[Regression]](../static/img/lens/regression_curve.gif)
Regressão (com escala)
---|---
Portanto, a linha de comando do ImageMagick é
magick barrel.jpg -distort barrel '0.0099 -0.0678 0.0014 1.0511' flat.jpg
Você também pode aplicar o mesmo comando diretamente à imagem no formato de câmera DNG "barrel.dng".
Exemplos de Correção de Lente
Camp Mobile
![[IM Output]](../static/img/img_photos/campmobile.jpg)
Original | ![[IM Output]](../static/img/img_photos/campmobile_pt.jpg)
Corrigida | ![[IM Output]](../static/img/img_photos/campmobile_comp.jpg)
Diferença
---|---|---
A fotografia original do campmobile à esquerda teve que ser tirada de uma distância bastante curta ao anoitecer, pois o espaço era limitado devido a um declive acentuado atrás do fotógrafo. (As más condições de iluminação explicam a tonalidade azulada, que resulta de um forte clareamento no pós-processamento.) A fotografia original apresenta uma distorção em barril acentuada, visível especialmente na faixa horizontal perto do topo da imagem e no canto traseiro da estrutura. A Nikon Coolpix 995 usada nesta foto consta na base de dados do PTlens, de modo que a distorção pôde ser prontamente corrigida, como se vê no centro. A imagem à direita mostra a diferença entre as versões em escala de cinza das duas fotografias, calculada pela subtração de ambas, seguida de negação e de clipping extremo e correção de gama. Novamente, os efeitos da correção são mais bem ilustrados pela faixa horizontal no topo. O círculo branco (que indica diferença zero) resulta da restrição de não escalonamento: os pontos sobre um círculo com diâmetro igual à menor dimensão da imagem permanecem inalterados.
Achatamento da GoPro
A lente da câmera GoPro produz uma distorção em barril acentuada, que parece fazer parte de sua identidade de marca. Por exemplo, a GoPro Hero 3+ silver edition tem uma lente olho de peixe com distância focal fixa de 2.77 mm, correspondendo a uma distância focal de 16 mm em filme de 35 mm, se toda a área fotossensível for utilizada. A GoPro Hero 3+ tem três modos de foto:
- 10 megapixels = 3680 × 2760 pixels grande angular (16 mm em filme de 35 mm)
- 7 megapixels = 3072 × 2304 pixels grande angular (16 mm em filme de 35 mm)
- 5 megapixels = 2624 × 1968 pixels ângulo médio (23 mm em filme de 35 mm)
A GoPro Hero 3+ é equipada com um sensor de 1/2.3", que tem um fator de corte de 5.64. (O que resulta em uma distância focal de apenas 15.62 mm em filme de 35 mm, sendo os 16 mm indicados pela informação EXIF provavelmente devidos a arredondamento.) Os dois primeiros modos parecem usar toda a área fotossensível; a resolução reduzida é obviamente obtida por subamostragem. Portanto, os parâmetros de distorção são os mesmos, como se pode comprovar na prática. O modo de 5 megapixels obviamente usa apenas parte da área fotossensível, já que 3680 / 2624 × 16 ≈ 23. Os parâmetros da lente podem ser determinados como
- grande angular:
- a = 0.06335
- b = -0.18432
- c = -0.13009
- ângulo médio:
- a = 0.01359
- b = -0.06034
- c = -0.10618
Em teoria, os parâmetros do segundo modo podem ser derivados do primeiro, já que os raios ri e Ri estão acoplados pelo fator de escala κ = 3680 / 2624 = 1.402, o que leva a:
- a2 = a1 / κ³
- b2 = b1 / κ²
- c2 = c1 / κ
Os parâmetros acima, resultantes de uma otimização independente, não diferem muito desses valores teóricos. Da mesma forma, os parâmetros para os diversos modos de vídeo podem ser derivados por otimização ou a partir da parte da área do sensor usada por esse modo. Para vídeo, o campo de visão horizontal não pode ser derivado dos dados EXIF. Ele pode ser calculado a partir da área fotossensível utilizada, determinado a partir do próprio vídeo (gravando imagens sob condições controladas) ou simplesmente estimado junto com os outros parâmetros, ou seja, deixado como parâmetro livre na otimização. Os parâmetros para vídeo HD (1920 × 1080) são: * a = 0.030530 * b = -0.124312 * c = -0.038543
Esses parâmetros podem ser usados para uma correção quadro a quadro com o ImageMagick. Como alternativa, podem ser usados para "achatar" o vídeo inteiro por meio do plugin DeBarrel do AVIsynth, que também usa o modelo de correção de lente do Panorama Tools.
Dois Teclados por el_supremo
A foto que tirei dos meus dois teclados tem uma distorção em barril bem evidente, porque foi feita com uma distância focal de 17 mm.
Esse tipo de distorção pode ser corrigido com, por exemplo, o Digital Photo Professional da Canon (eu tenho uma câmera Canon 50D). Outros fabricantes de câmeras SLR costumam fornecer software para fazer esse tipo de correção para suas lentes, mas eu queria ver quão bem os exemplos acima funcionariam nesta foto. O primeiro passo é acessar o site do LensFun e baixar a versão mais recente da sua base de dados de câmeras. Descompacte o pacote (o winzip consegue descompactar um arquivo .tar.gz no Windows) e então, no diretório "lensfun/data/db", procure o arquivo que corresponde ao fabricante da sua câmera. No meu caso, consultei o "slr-canon.xml", que pode ser editado com qualquer editor de texto. Agora encontro a informação da lente específica que estou usando, que neste caso é uma "EF-S 17-85mm". A informação dessa lente tem esta aparência:
<lens>
<maker>Canon</maker>
<model>Canon EF-S 17-85mm f/4-5.6 IS USM</model>
<mount>Canon EF-S</mount>
<cropfactor>1.6</cropfactor>
<calibration>
<distortion model="ptlens" focal="17" a="0.021181" b="-0.055581" c="0" />
<distortion model="ptlens" focal="20" a="0.019344" b="-0.043786" c="0" />
<distortion model="ptlens" focal="22" a="0.015491" b="-0.026682" c="0" />
<distortion model="ptlens" focal="28" a="0.008084" b="-0.007472" c="0" />
<distortion model="ptlens" focal="30" a="0.005522" b="-0.001763" c="0" />
<distortion model="ptlens" focal="35" a="0.003149" b="0.002207" c="0" />
<distortion model="ptlens" focal="44" a="0" b="0.008269" c="0" />
<distortion model="ptlens" focal="53" a="0" b="0.008792" c="0" />
<distortion model="ptlens" focal="61" a="0" b="0.00738" c="0" />
<distortion model="ptlens" focal="72" a="0" b="0.006226" c="0" />
<distortion model="ptlens" focal="78" a="0" b="0.007095" c="0" />
<distortion model="ptlens" focal="85" a="0" b="0.007288" c="0" />
</calibration>
</lens>
As entradas de calibração fornecem valores de distorção para uma faixa de distâncias focais de 17mm até 85mm. Se a distância focal de que eu precisasse estivesse entre dois desses valores, eu poderia escolher o mais próximo ou interpolar os valores. Como a foto que estou corrigindo foi feita a 17mm, preciso da informação da primeira linha das informações de calibração. Isso me dá os valores: a="0.021181" b="-0.055581" c="0" Estes são os três parâmetros usados para corrigir a distorção da lente. No entanto, para algumas versões mais antigas do IM, a correção de distorção em barril requer um quarto parâmetro d. Felizmente, é fácil calcular o valor de d a partir dos outros três usando esta fórmula simples: d = 1-a-b-c Isto é: d="1.0344". |
O IM calcula o valor de 'd' automaticamente, caso não seja fornecido como argumento de distorção, mas algumas versões mais antigas do IM não faziam isso. |
|---|---|
| Isso torna a Distorção em Barril propriamente dita, para corrigir a distorção da lente... |
magick keyboards.jpg \
-distort barrel "0.021181 -0.055581 0" \
keyboards_ptlens.jpg
| Claro que você não deve salvar em JPEG antes de terminar completamente o processamento da sua imagem, devido à compressão com perdas do JPEG.
---|---
Na foto original, a distorção é particularmente evidente ao longo da parte inferior da estante de partituras e ao longo do teclado superior. Essas distorções desaparecem quase por completo na foto de saída. Uma comparação visual deste resultado com o obtido pelo software da Canon mostra essencialmente o mesmo resultado. El-Supremo
![[IM Output]](../static/img/img_photos/keyboards.jpg)
![[IM Output]](../static/img/lens/keyboards_ptlens.jpg)