Soy nuevo en el procesamiento de imágenes y comencé a usar MATLAB para el procesamiento de astrofotografía. Estoy tratando de procesar 10 imágenes corruptas (la misma imagen pero mezclada con diferente ruido) del planeta Saturno usando MATLAB. Aprendí que al apilar las 10 imágenes juntas se obtiene una imagen con reducción de ruido con un PSNR alto y probé la siguiente codificación para que funcione.
Pero la salida parece una imagen saturada poco clara sin reducción de ruido.
¿Puedes mirar el código y señalarme dónde me equivoqué?
Gracias
%% We are going to stack the 10 corrupted images and finally calculate the PSNR SSIM
clearvars;% Clear all the variables
close all;
load('planetdata.mat'); %to load the corrupted Image set (4-D uint8)
Clean = imread('Clean Image of Saturn.jpg');%Clean Image of Saturn.600x800x3 uint8
planet1(: , :, :) = planetdata(1, :, :, :);%One corrupted Image as reff
% Set the number of images to stack is 10
stack_number = 10;
% Lets use Clean image as reference of dimensions required
im_x = size(Clean, 1);
im_y = size(Clean, 2);
im_z = size(Clean, 3);
% Lets Generate a blank image for image stacking
resultIM = uint8(zeros(im_x, im_y, im_z));
% Iterate through the images to stack
for i = 1:1:stack_number
% Read in the target object image
CorruptIM(: , :, :) = planetdata(i, :, :, :);
% Perform image stacking using the target object image
resultIM = resultIM + CorruptIM;
end
% resultIM = resultIM / stack_number;
%% Lets Display Results
workspace; % to Make sure the work space panel is showing.
fontSize = 15;
figure;
subplot(1, 3, 1);
imshow(Clean);
title('Clean Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Position', get(0,'Screensize'));
% Give a name to the title bar.
set(gcf,'name','Stacking','numbertitle','off')
% Display one corrupt image as reference
subplot(1, 3, 2);
imshow(planet1);
title('Corrupt Image 1 : Ref', 'FontSize', fontSize);
% Display Stacked image
subplot(1, 3, 3);
imshow(resultIM);
title('Stacked Image', 'FontSize', fontSize);
%% PSNR AND SSIM Calculation
%Lets Find PSNR for For Resultant Image
[row,col] = size(Clean);
size_host = row*col;
o_double = double(Clean);
w_double = double(resultIM);
s=0;
for j = 1:size_host % the size of the original image
s = s+(w_double(j) - o_double(j))^2 ;
end
mes =s/size_host;
psnr =10*log10((255)^2/mes);
fprintf('The PSNR value for Stacked Image is %0.4f.\n',psnr);
%Lets Find SSIM for resultant Image
[ssimval, ssimmap] = ssim(uint8(resultIM),Clean);
fprintf('The SSIM value for Stacked Image is %0.4f.\n',ssimval);
El apilamiento de imágenes es un proceso mediante el cual puede reducir el ruido, pero no funciona agregando las imágenes de forma aditiva, sino promediando. La razón por la que funciona el apilamiento es que la señal de la misma foto tomada varias veces será la misma, pero el ruido aleatorio será diferente cada vez.
Si promedias las imágenes, el ruido tenderá a reducirse ya que no es el mismo entre imágenes.
Es posible que su ruido no sea cero, pero el problema más importante es que está agregando a una matriz uint8. Estos valores suben a 255 y es probable que se desborden en la segunda imagen.
Debe hacer sus pasos intermedios en coma flotante, y luego convertir a uint8 y quizás normalizar si es necesario.
Sí, esta respuesta debe estar en SO, junto con la pregunta. Aquí va:
Es casi seguro que su "ruido" no sea de media cero. Está agregando todos los valores de ruido en todos los cuadros, lo que naturalmente conduce a un valor promedio para cada R, G, B que es el mismo, es decir, un píxel blanco (o gris). Su imagen final es inútilmente autoescalada por imshow
. Dado que no proporcionó el código que usó para sintetizar el ruido, es posible que me equivoque, pero revise sus archivos de solo ruido e intente nuevamente.
Sin embargo, un problema más inmediato es que debido a que resultIM es del tipo uint8, recorta valores superiores a 255. Al agregar 10 copias diferentes de CorruptIM, parece que una gran cantidad de píxeles se vuelven blancos (255)
resultIM
a su tipo, uint8
recorta valores superiores a 255. Al agregar 10 copias diferentes de CorruptIM
, parece que una gran cantidad de píxeles se vuelven blancos (255).
scottbb
doug
AJ Henderson
scottbb