{"id":6516,"date":"2009-09-26T09:38:22","date_gmt":"2009-09-26T07:38:22","guid":{"rendered":"https:\/\/www.dreamsworld.it\/emanuele\/?p=6516"},"modified":"2016-05-17T14:09:08","modified_gmt":"2016-05-17T12:09:08","slug":"come-equalizzare-una-immagine-in-matlab","status":"publish","type":"post","link":"https:\/\/www.dreamsworld.it\/emanuele\/2009-09-26\/come-equalizzare-una-immagine-in-matlab\/","title":{"rendered":"Come equalizzare una immagine in MATLAB."},"content":{"rendered":"<p>Prima di osservare il codice facciamo una <strong>piccola premessa<\/strong> spiegando di cosa stiamo parlando e per farlo prendiamo in considerazione un&#8217;immagine in bianco e nero come quella dell&#8217;esempio sottostante.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment wp-att-6522 centered\" src=\"\/\/www.dreamsworld.it\/emanuele\/wp-content\/uploads\/2009\/09\/2009-09-26_equalizzare_immagine.jpg\" alt=\"Equalizzare una immagine\" width=\"500\" height=\"288\" \/><\/p>\n<p>L&#8217;operazione di equalizzazione consiste nell'&#8221;<em>allargare<\/em>&#8221; <strong>la curva dell&#8217;istogramma<\/strong> in modo da sfruttare l&#8217;intera scala di grigi disponibile. Questo permette una migliore distinzione degli oggetti (<em>l&#8217;immagine risulta pi\u00f9 contrastata<\/em>) e solitamente pu\u00f2 esser d&#8217;aiuto nell&#8217;elaborazione di un&#8217;immagine <strong>sottoesposta o sovraesposta<\/strong>.<\/p>\n<p>A livello teorico, l&#8217;equalizzazione tenta di realizzare <strong>un istogramma piatto<\/strong>, portando verso una soglia uguale tutti i livelli di grigio, cosa ovviamente non possibile quando lavoriamo nel <a title=\"Wikipedia - Discretizzazione\" href=\"https:\/\/it.wikipedia.org\/wiki\/Discretizzazione\" target=\"_blank\">discreto<\/a>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment wp-att-6525 centered\" src=\"\/\/www.dreamsworld.it\/emanuele\/wp-content\/uploads\/2009\/09\/2009-09-26_equalizzazione_discreta.png\" alt=\"Equalizzazione nel discreto\" width=\"600\" height=\"83\" \/><\/p>\n<p>Matematicamente l&#8217;algoritmo tenter\u00e0 di definire inizialmente la <strong>densit\u00e0 di probabilit\u00e0<\/strong> <em>p(rj)<\/em> di ogni livello di grigio e poi costruir\u00e0 la nuova immagine attraverso una funzione di passaggio basata su questo valore, punto per punto.<\/p>\n<pre lang=\"matlab\" line=\"1\">% Equalizzazione di una immagine.\r\n% Per l'esempio sfruttiamo una immagine in scala di grigi presente\r\n% di default in MATLAB.\r\n\r\n% Carico l'immagine:\r\nim=imread('cameraman.tif');\r\n% Imposto il numero di livelli di grigio:\r\nL=256;\r\n% Salvo in due variabili la dimensione dell'immagine:\r\n[m n]=size(im);\r\n% Salvo in una variabile il numero di pixel totali dell'immagine:\r\nN=m*n;\r\n% Imposto una vettore colonna lungo 256 righe:\r\nist=zeros(L,1);\r\n% Popolo il vettore assegnando in ogni riga il numero di occorrenze\r\n% di ogni livello di grigio:\r\nfor i=1:L\r\n\tist(i)=sum(sum(im==i-1));\r\nend\r\n% Creo un vettore colonna contenente i numeri da 0 a 1 con passo 1\/255:\r\nr=[0.0:1\/(L-1):1.0]';\r\n% Effettuo la somma cumulativa del vettore 'ist' dividendolo per il numero di pixel\r\n% in modo da ottenere la probabilit\u00e0 incrementale di ogni livello:\r\ns=cumsum(ist)\/N;\r\n% Creo un vettore colonna contenente i numeri da 0 a 255:\r\nss=[0:L-1]';\r\n% Effettuo la traslazione di ogni livello di grigio seguendo la probabilit\u00e0:\r\nss=round(ss+(s-r)*(L-1));\r\n% Converto la matrice dell'immagine originale in un vettore colonna di lunghezza N:\r\nim_vett=reshape(im,m*n,1);\r\n% Disegno l'immagine di output (equalizzata) richiamando per ogni pixel il\r\n% corrispettivo valore calcolato:\r\nim_out=uint8(reshape(ss(im_vett),m,n));\r\n% Mostro a schermo il risultato:\r\nsubplot(1,2,1);\r\nimshow(im);\r\nsubplot(1,2,2);\r\nimshow(im_out);<\/pre>\n<p>Il risultato finale sar\u00e0 quello mostrato nell&#8217;immagine qui sotto. A sinistra l&#8217;immagine originale, a destra quella equalizzata.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"attachment wp-att-6523 centered\" src=\"\/\/www.dreamsworld.it\/emanuele\/wp-content\/uploads\/2009\/09\/2009-09-26_cameraman_equalized.jpg\" alt=\"Esempio equalizzazione: cameraman\" width=\"583\" height=\"318\" \/><\/p>\n<p>Abbiamo &#8211; finalmente &#8211; scoperto cosa facciano <strong>i nostri programmi di foto ritocco<\/strong> quando andiamo a modificare una immagine semplicemente pressando un pulsante&#8230; \ud83d\ude42<\/p>\n<p><strong>Emanuele<\/strong><\/p>\n<p>PS: \u00e8 interessante notare come l&#8217;equalizzazione possa comportare l&#8217;aumento di rumore e la <strong>creazione di falsi contorni<\/strong> da sistemare attraverso opportuni algoritmi di riduzione del rumore.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prima di osservare il codice facciamo una piccola premessa spiegando di cosa stiamo parlando e per farlo prendiamo in considerazione un&#8217;immagine in bianco e nero come quella dell&#8217;esempio sottostante. L&#8217;operazione di equalizzazione consiste nell&#8217;&#8221;allargare&#8221; la curva dell&#8217;istogramma in modo da &hellip; <a href=\"https:\/\/www.dreamsworld.it\/emanuele\/2009-09-26\/come-equalizzare-una-immagine-in-matlab\/\">Leggi ancora &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_post_was_ever_published":false},"categories":[3],"tags":[1629,1633,595,640,1628,242,38,31],"class_list":["post-6516","post","type-post","status-publish","format-standard","hentry","category-computer","tag-elaborazione-delle-immagini-digitali","tag-equalizzazione","tag-fotografie","tag-how-to","tag-matlab","tag-programmazione","tag-studiare","tag-universita"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/6516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/comments?post=6516"}],"version-history":[{"count":0,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/6516\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/media?parent=6516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/categories?post=6516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/tags?post=6516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}