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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

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??
307 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