ECUALIZACIÓN DEL HISTOGRAMA DE UNA IMAGEN EN C#

 

Jugando con el Visual Studio Express, cogí mi anterior algoritmo en Matlab para ecualizar el histograma de una imagen y lo quise adaptar para C# (y de paso lo optimicé un poco). Tuve algunas dificultades como el cargar una imagen que se hallara en la misma carpeta que el programa en un objeto Bitmap, para ello necesité escribir este pedazo de código dentro de la propiedad Load del formulario de la aplicación (el objeto tipo Bitmap "bmap" es global):

 

string path;

path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

path = string.Concat(path, "\\fotografo.bmp");

char[] charBuf = path.ToCharArray();

char[] charbuf2 = new char[path.Length - 6];

for (int i = 6; i < path.Length; i++)

charbuf2[i - 6] = charBuf[i];

string ruta = "";

ruta = new string(charbuf2);

try

{

pictureBox1.Image = new Bitmap(ruta);

bmap = new Bitmap(ruta);

}

catch { MessageBox.Show("no se encuentra el archivo");

this.Close();

}

 

 

La variable "path" posee la ruta de la aplicación en formato uri (por ejemplo, si la aplicación está en C, la variable "path" almacenará "file:\\C:\\"). Hay clases de .Net que admiten el formato uri, pero no las rutas para objetos Bitmap. Para pasarle una ruta válida, había que quitarle el "file:\\", para ello se convierte la cadena "path" a un array de caracteres, se eliminan los siete primeros elementos del array y se vuelve a convertir a cadena (string).

El programa (para Visual Studio 2008) se puede descargar de aquí. El algoritmo para ecualizar el histograma está dentro del evento click del ratón. Está pensado para valores negativos también, para el caso en que la imagen a ecualizar haya tenido algún tratamiento intermedio que genere valores negativos (los objetos Bitmap sólo aceptan valores entre 0 y 255).