2017-01-04 1 views
2

Je construis un circuit qui lira des trames PAL/NTSC (576i, 480i) à partir d'une entrée analogique. Le microcontrôleur a 32 Ko de mémoire. Mon objectif est de réduire l'entrée à une résolution de 32x16, et de transférer cette image à la matrice LED.Quels sont les algorithmes de down-scaling en ligne?

Le cadre PAL peut prendre environ 400 ko de mémoire. J'ai donc pensé à la mise à l'échelle en ligne. Lire 18 pixels, décimer jusqu'à 1. Lire 45 lignes, décimer jusqu'à 1. Utilisation maximale de la mémoire: 45 x 32 = 1,44 kB (45 lignes décimées en attente de décimation). Question: Quels sont les autres algorithmes de réduction d'image en ligne, autres que celui ci-dessus? Googling est extrêmement difficile parce que les services en ligne sont trouvés (redimensionnement PDF, etc)

+3

Vous devriez probablement commencer [ici] (https://fr.wikipedia.org/wiki/Image_scaling). Portez une attention particulière à 'l'échelle d'image peut être interprétée comme une forme de rééchantillonnage d'image ou de reconstruction d'image en tenant compte du théorème d'échantillonnage de Nyquist. Selon le théorème, l'échantillonnage vers le bas vers une image plus petite à partir d'un original de plus haute résolution ne devrait être effectué qu'après avoir appliqué un filtre anti-repliement 2D approprié pour empêcher les artefacts de repliement. L'image est réduite à l'information qui peut être portée par l'image plus petite. –

Répondre

-1

Notez que les formats mentionnés sont entrelacés, de sorte que vous lisez d'abord 0e, 2e, 4e .. lignes (première demi-trame), puis 1er , 3ème, .. lignes (deuxième demi-trame). Si vous utilisez la moyenne simple des valeurs de pixels dans la cellule résultante (je suppose que c'est correct pour une matrice de sortie si petite), créez un tableau de sortie (16x32 = 512 entrées) et additionnez les valeurs appropriées pour chaque cellule. Et vous avez besoin d'un tampon pour une seule ligne d'entrée (768 ou 640 entrées).

x_coeff = input_width/out_width 
y_coeff = input_height/out_height 
out_y = inputrow/y_coeff 
for (inputcol = 0..input_width - 1) 
    out_x = inputcol/x_coeff 
    out_array[out_y][out_x] += input_line[inputcol] 
inputrow = inputrow + 2 
if (inputrow = input_height) 
    inputrow = 1 
if (inputrow > input_height) 
    inputrow = 0 
    divide out_array[][] entries by (x_coeff * y_coeff)