Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

immagini che scorrono su altre immagini

M
Matt_Ruggiero (2380 points)
16 39 45
in Es1 by (2.4k points)
closed by
per risolvere il primo esercizio vorrei far scorrere un quadrato (NxN) su un immagine confrontare che i suoi pixel siano uguali a quelli dell'immagine sottostante. qualcuno sa dirmi come fare??
313 views
closed with the note: deadline expired

1 Answer

D
Domenicobrz (1470 points)
3 9 19
by (1.5k points)
edited by

In teoria per sapere se una determinata area di un'immagine contiene pixel dello stesso colore basterebbe creare due cicli for nestati fra loro i cui valori iniziali del range corrispondono al vertice "in alto a sinistra" dell'area che ti interessa analizzare. Esempio pratico:

pixeluguali = true
for y in range(yiniziale, yfinale)
    for x in range(xiniziale, xfinale)
        se -> img[y][x] non è dello stesso colore di: __variabile__
           pixeluguali = false
           break
 # all'uscita del ciclo for pixeluguali sarà true se tutti i pixel 
 # dell'area analizzata sono dello stesso colore di __variabile__

"Muovere" l'area oggetto di analisi richiede ovviamente altri cicli for che tengano in conto la differenza fra la grandezza dei lati dell'immagine e dei lati dell'area da analizzare per scorrere su ognuno dei pixel

Prima di procedere però prova a pensare cosa implica un programma simile, ad esempio se l'immagine fosse grande 50x50 pixel, alla prima iterazione creeresti un'area da analizzare di un solo pixel, che scorre tutti i pixel dell'immagine (50*50*1 possibili test di uguaglianza se tutti i pixel sono diversi fra loro). Alla seconda, un quadrato 2x2 scorre nuovamente tutti i pixel dell'immagine, testando un'area di 4 pixel ad iterazione (49*49*4 possibili test di uguaglianza), alla terza l'area è 3x3 = 9 (48 * 48 * 9 tdu).

Scorrere i primi 4-5 (su 50) quadrati richiederebbe quasi 70000 test di uguaglianza per un'immagine grande soltanto 50x50. Anche procedendo al contrario e scorrendo per primi i quadrati più grandi e fermando lo scorrimento appena si trova un quadrato che effettivamente contiene pixel dello stesso colore avresti performance improponibili