O código fonte do IMLAB.
Pegue o arquivo "src/process/geometric.cpp" como base. Basta acrescentar mais itens neste mesmo arquivo para realização deste trabalho.
O objetivo do trabalho é se familiarizar com a implementação de um sistema de processamento de imagens que possui vários tipos numéricos e aplicar os conhecimentos de amostragem e reconstrução para implementar a escala de imagem com interpolação bicúbica e a rotação com interpolação linear.
A escala com interpolação bicúbica deve ser otimizada para evitar cálculos duplicados, assim como na interpolação linear já implementada. Veja o artigo "EFFICIENT IMAGE MAGNIFICATION BY BICUBIC SPLINE INTERPOLATION" por Michael J. Aramini no tópico Image Processing em http://members.bellatlantic.net/~vze2vrva/.
Corrija o código da escala com interpolação linear para ser mais simples e realizar o anti-aliasing para redução do tamanho corretamente.
Para a rotação você deve substituir o código com interpolação de ordem zero por uma interpolação linear.
O menus devem ser:
Geometric -> Resize... (linear) Resize... (bicubic) ------------------- Rotate... ------------------- Crop...
Embora o código fique um pouco mais lento crie uma função genérica de transformação geométrica onde você passa como parâmetro uma função que realiza a transformação e qual a interpolação a ser utilizada.
Compare o desempenho com a solução otimizada.
Para ganhar pontos extras implemente outras operações geométricas simples, tais como:
Rotate -90o (ccw) Rotate +90o (cw) Rotate 180o Reduze Area by 2 Reduze Area by 4 Rotate By Line... Mirror Flip Add Margins...
Reduce Area
- reduz o número total de pixels pela metade (w/Ö2, h/Ö2) ou por um quarto (w/2, h/2).- no diálogo deve-se especificar dois pontos e um flag dizendo se estão na vertical ou horizontal.
Rotate By Line
Flip
- inverte a ordem das linhas
Mirror
- inverte a ordem das colunas
Add Margins
- é o inverso deCrop
Retorna para a página do curso: INF1378.