08 marzo 2009

Mucho ruido y pocas nueces. Cuantización escalar con Dithering aplicando ruido pseudo-aleatorio en MATLAB

En este ejemplo voy a tomar una imagen PGM de 8 bits en escala de grises (256 tonos de grises o 2^8) y la voy a convertir a 5 bits (32 tonos de grises o 2^5). Ese es el objetivo de la cuantización, al menos la cuantización en imágenes, el poder representar una imagen con diferente número de bits que la original tratando de que la imagen cuantizada se vea lo más parecido a la original, que obviamente es prácticamente imposible.

clear;clc;
imagen = double(imread('boat.pgm'));

figure(); imshow(uint8(imagen));
title('Imagen Original 8 bits');

[cols rows] = size(imagen);

%--------------------------------------------------------
l = (2^3);
imQ = UniformQuantizationToImage(imagen,l);

figure(); imshow(uint8(imQ));
title('Imagen Cuantizada 4 bits');

for i=1:6
a = i*4;
imWNoise = imagen + generateNoiseImage(cols,rows,-a,a);
imR = UniformQuantizationToImage(imWNoise,l);
figure(); imshow(uint8(imR));
title(['Imagen con Ruido aleatorio[-a a] con a= ', num2str(a)]);
end
%--------------------------------------------------------

function imgQuantized=UniformQuantizationToImage(imgToQuantize,levels)
%Aplicar quantizacion uniforme a la imagen
imQ = floor(imgToQuantize.*((levels+1)/256))+1;
%Recuperar imagen en base a la cuantizada para mostrar
%la pérdida de información
imgQuantized = imQ.*((256/levels)-1);
end

CuantizacionUnif_BLOG_01

CuantizacionUnif_BLOG_02 CuantizacionUnif_BLOG_03 CuantizacionUnif_BLOG_04 CuantizacionUnif_BLOG_05 CuantizacionUnif_BLOG_06 CuantizacionUnif_BLOG_07 CuantizacionUnif_BLOG_08

This is I

Blog dedicado a escribir sobre Sistemas Embebidos y el Internet de las Cosas o IoT que le llaman.