Durante esta actividad, los alumnos serán capaces de:
Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.
Esta actividad puede ser elaborada de manera individual o en parejas.
Escribe un programa en gcc para Linux que permita realizar la combinación de dos imágenes BMP de 24-bits por pixel, usando el algoritmo de disolución alfa.
Para ello, primeramente deberás implementar una biblioteca de enlace dinámico (shared object) que permita manipular en memoria imágenes BMP de 224 colores.
Posteriormente, deberás desarrollar dos versiones diferentes del algoritmo de combinación de imágenes y medir sus respectivos tiempos de ejecución:
Las dos versiones deben estar disponibles desde el mismo código fuente,
gracias al uso de directivas condicionales del preprocesador de C.
Al momento de correr el Makefile
, se debe poder indicar
qué versión particular de ejecutable se desea generar, tal como se
realizó en clase.
El programa ejecutable debe correr desde la línea de comando. Debe recibir como argumentos el factor de intensidad (un entero entre 0 y 255), el nombre de los dos archivos de entrada (las imágenes de frente y fondo) y el nombre del archivo de salida (imagen combinada):
./combina <intensidad> <entrada1.bmp> <entrada2.bmp> <salida.bmp>
Por ejemplo, suponiendo que se tienen las siguientes dos imágenes (disponibles en este archivo: bitmaps.tar.gz):
chavas.bmp | |
---|---|
flor.bmp |
Si el programa se corre así:
./combina 155 chavas.bmp flor.bmp salida1.bmp
El resultado sería la siguiente imagen:
salida1.bmp |
---|
Como segundo ejemplo, si el programa se corre así:
./combina 77 chavas.bmp flor.bmp salida2.bmp
El resultado ahora sería:
salida2.bmp |
---|
Si se detecta algún error, el programa debe terminar con un mensaje descriptivo del problema. Los posibles errores incluyen:
A continuación se describe el algoritmo a implementar.
The following algorithm produces a new sequence called RESULT of size n. FOREi, BACKi and RESULTi represent a specific byte, where i is an integer number in between 0 and n-1. For each byte i from 0 to n-1, do the following:
RESULTi = [FOREi * alpha] / 256 + [BACKi * (255 - alpha)] / 256
La siguiente tabla muestra la estructura de un archivo BMP de 24 bits
por pixel (adaptada del documento
Graphics File
Formats):
Offset | Tipo | Descripción |
---|---|---|
0 |
char[2]
|
Número mágico: los caracteres "BM". |
2 |
uint32_t
|
Tamaño del archivo en bytes. |
18 |
uint32_t
|
Ancho de la imagen en pixeles. |
22 |
uint32_t
|
Alto de la imagen en pixeles. |
28 |
uint16_t
|
Número de bits por cada pixel. Debe ser 24. |
30 |
uint32_t
|
Compresión. Debe ser 0 para indicar que no hay compresión alguna. |
54 |
uint8_t[N]
|
El arreglo con los pixeles del bitmap, donde N = Ancho * Alto * 3. |
Elabora un reporte de por lo menos 200 palabras donde describas los
resultados obtenidos de las mediciones y las conclusiones a las que
llegaste. Incluye también una gráfica (de barras, de líneas, etc.) en
donde se puedan observar claramente las diferencias en las mediciones y
las mejoras (speedup) obtenidas. El reporte se debe presentar
como un documento en formato PDF llamado reporte.pdf
.
Asegúrate de incluir tu nombre y matrícula.
Coloca en un archivo llamado combinacion.zip
el directorio
que contenga todos los archivos fuente (inclyendo archivos
Makefile
) de tu proyecto así como el archivo
report.pdf
.
NOTA: Cada archivo fuente de C debe incluir en la parte superior un comentario con el nombre y matrícula de los autores. Por ejemplo:
/* +------------------------------------------ | Nombre: María Expropiación Petronila | Matrícula: 1166666 | Actividad: Proyecto final: Combinación de imágenes. | Fecha: 29 de noviembre, 2010. +------------------------------------------ */
Usando Sistema de
Entrega de Tareas Automatizado, entrega el archivo
combinacion.zip
. No se aceptan proyectos por ningún otro
medio.
Fecha límite: Lunes, 29 de noviembre.
Esta actividad será evaluada usando los siguientes criterios:
100 | La actividad cumple con todos los requerimientos. |
---|---|
-10 | No se incluyó en comentario los datos de los autores. |
10 | El programa fuente produce errores al momento de compilarlo. |
50-90 | El programa tiene algunos errores a tiempo de ejecución. |
DA | La solución es un plagio. |