Domanda

Voglio media alcune immagini .jpg che sono danneggiati dal rumore a media nulla additivo gaussiano. Dopo la ricerca intorno, ho capito di aggiungere le matrici di immagine e dividere la somma per il numero di matrici. Tuttavia, l'immagine risultante è completamente nero. Normalmente, quando aumenta il numero di immagine quindi l'immagine risultante viene meglio. Ma quando lo uso più immagini diventa più scura.

Sto usando 800x600 immagini .jpg in bianco e nero. Ecco lo script che ho usato:

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);
È stato utile?

Soluzione

Il problema è probabilmente che i dati di immagine è tutto di tipo uint8 , in modo da tutti sommando provoca una saturazione al valore del 255 per i valori dei pixel, dando un'immagine per lo più bianchi, che poi finisce per guardare lo più nero quando poi dividere per il numero di immagini. Si dovrebbe convertire le immagini in un altro tipo di dati, come double , poi eseguire la media, e quindi riconvertire uint8:

% Load your images:
image1 = imread('PIC1.jpg');
image2 = imread('PIC2.jpg');
image3 = imread('PIC3.jpg');
image4 = imread('PIC4.jpg');

% Convert the images to type double and sum them:
imageSum = double(image1) + double(image2) + double(image3) + double(image4);

% Divide by the number of images and convert back to type uint8:
averageImage = uint8(imageSum./4);

% Display the averaged image:
imshow(averageImage);

Nota a margine: Si dovrebbe evitare di dare le variabili gli stessi nomi degli eventuali funzioni esistenti, dal momento che questo potrebbe causare problemi / confusione. Questo è il motivo per cui ho cambiato il sum variabile imageSum (c'è una funzione built-in sum ).

Altri suggerimenti

Una soluzione alternativa utilizzando IMLINCOMB dalla casella degli strumenti di elaborazione delle immagini:

I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);

È inoltre possibile utilizzare imagesc (averageImage); Questa funzione con auto-scala l'immagine e non apparirà essere nero

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top