En este caso supongamos que tenemos una imagen en formato PGM, (escala de grises de 256 niveles, o sea 8 bits). Si queremos extraer la información de cada bit entonces tenemos lo siguiente:
- u, es el valor del pixel al que le vamos a extraer el bit
- B, es el número de bits usado para representar un pixel
- n, es el bit que queremos extraer de cada pixel, B es el menos significativo y 1 es el más significativo
- L, es en nivel máximo que puede tener nuestra imagen
Según Anil K. Jain en su libro Fundamentals of Digital Image Processing, en el capítulo dedicado al mejoramiento de imágenes (o image enhancement), explica la extracción de bits en una imagen y define al pixel u de la siguiente manera:
y queremos que nuestro pixel resultado v de la extracción de bit sea:
El autor define kn como se muestra a continuación:
En donde:
En este caso u puede tomar valores entre 0 y 255 (ya que es una imagen PGM de 8 bits). Por ejemplo si decimos que u = 237 y queremos extraer el bit más significativo entonces tenemos que n = 8 y B = 8. Representando u en su equivalente binario tendriamos que u = 11101101. Nos quedaría de la siguiente manera:
- in = i8 = int[237/(2^8-8)] = 237
- in-1 = i7 = int[237/(2^8-7)] = int[237/2^1] = int[237/2] = int[118.5] = 118
- kn = k8 = 237 – 2*118 = 237 – 236 = 1
Enseguida se muestra el codigo en MATLAB para llevar a cabo la extracción de bits de la imagen del bote:
clc;clear;
myImagen = imread('boat.pgm');
myImagenNueva = myImagen;
[rows cols] = size(myImagen);B = 8;
L = 255;for n = 1:B
for i = 1 : rows
for j = 1 : cols
u = double(myImagen(i,j));
iEne = floor(u/2^(B-n));
iEneMenosUno = floor(u/2^(B-(n-1)));
BitExtraido = iEne - (2*iEneMenosUno);
if BitExtraido == 1
BitExtraido = L;
else
BitExtraido = 0;
end
myImagenNueva(i,j) = BitExtraido;
end
end
subplot(2,4,n);
imshow(myImagenNueva);
title(['Bit', num2str(n)]);
end
Oh, qué interesante!..si, no entendí ni papas pero ha se ser importante para que lo escribas y expongas. Te amo y eres mi geek favorito sin duda. Estoy orgullosa de tí.
ResponderEliminarla imagen donde va?
ResponderEliminarEn esta línea de código la lees:
ResponderEliminarmyImagen = imread('boat.pgm');