Testo d’esame del 25/7/2011 (a) Sia data l’immagine mostrata nella figura seguente, contenuta nel file circlesx.png (derivata da una delle immagini di cui MATLAB è corredato, circles.png): Con un po’ di fantasia, l’immagine potrebbe rappresentare un insieme di cellule (bianche) visibili al microscopio, così vicine tra loro da toccarsi, alcune delle quali internamente corredate da due corpuscoli (“nuclei”, rappresentati dalle macchiette ellittiche grigie), altre da uno solo. Si richiede di: 1) trovare il raggio (in pixel) delle “cellule”, supposte circolari e tutte uguali 2) individuare e segnalare (tramite una crocetta nel rispettivo centroide) le cellule che hanno al loro interno due nuclei anziché uno. Se le cellule non fossero a contatto, il compito sarebbe semplice: consisterebbe in: applicare una soglia opportuna per binarizzare l’immagine, in modo che nell’immagine bianco/nero risultassero visibili le maschere delle varie “cellule” come cerchi bianchi su sfondo nero; trovare in essa gli oggetti connessi (i cerchi) chiedendone la misura del raggio e la posizione dei centroidi; per ciascun oggetto dell’immagine binaria, isolare dall’immagine originale la cellula corrispondente (tramite prodotto per la singola maschera), applicare una soglia per evidenziare solo i nuclei, e trovare gli oggetti connessi individuati da ciascuna maschera. Invece, essendo le cellule a contatto, il lavoro da fare è maggiore! Suggerimenti: Per separare le cellule, si può ricorrere ad operazioni di morfologia matematica (dopo aver trasformato l’immagine in bianco/nero). In seguito, si potrà individuare il centroide di ciascuna cellula. Le operazioni morfologiche per il distacco, però, ridurranno la dimensione delle cellule, per cui la misura del raggio sarà alterata. Per trovare il raggio effettivo (originale) delle cellule, si suggerisce di ricostruire, a partire dal centroide, ciascuna cellula tramite (ad esempio) una function di disegno di cerchi (già vista in altri esercizi fatti durante il Corso). Si farà variare il raggio della cellula ricostruita iterativamente, da un valore minimo ad uno massimo, confrontando – ad ogni ricostruzione – l’immagine ottenuta con quella originale (trasformata in bianco/nero). Il confronto potrà essere ottenuto con l’AND tra l’immagine ricostruita e l’originale binarizzata: tale AND sarà identico all’immagine ricostruita, fintantoché il raggio usato per la ricostruzione sarà più piccolo o uguale a quello reale (i cerchi disegnati cadono dentro quelli originali); appena il raggio supererà quello effettivo, i cerchi ricostruiti conterranno anche alcune parti che nell’immagine iniziale binarizzata sono neri, e quindi l’AND tra le due immagini sarà più piccolo dell’immagine ricostruita. Calcolando il rapporto tra la aree accese nelle due immagini, questo sarà dunque pari all’unità all’inizio, per poi decrescere quando il raggio usato per la ricostruzione supererà quello effettivo dei cerchi. Trovato R, occorrerà usare i centroidi delle singole cellule, e il raggio R, per ricostruire le maschere delle singole cellule; con queste maschere si isoleranno nell’immagine iniziale (opportunamente binarizzata) i nuclei che ad esse competono (oggetti connessi), che saranno contati per decidere se sono uno o due. Si metteranno infine le crocette in base a quest’ultima misura. Il risultato dell’esecuzione del programma dev’essere: Giorgio De Nunzio