El operator multiple está pensado
para operaciones pixel a pixel entre varias imágenes, por ejemplo
sumas, productos , etc.
La clase mantiene una lista de imágenes
que deben ser de igual dimensión y tamaño. La que se inserte
primero en la lista se convierte automáticamante en el acumulador,
las operaciones se harán con todas las imágenes de la lista
y el resultado se escribe en la primera.
La idea es muy similar a la de un OperatorUnary, pero
aquí para efectuar la operación se le pasa al objeto un bicotiPixelOperatorBinary
que toma dos Pixeles y devuelve otro. Se recorren las imágenes con
iteradores aplicandole el operador binario a cada par de imágenes
y acumulando el resultado en la primera.
Por ejemplo si queremos sumar dos imágenes de flotantes:
Primero creamos el Operator Multiple :
bicotiOperatorMultiple< float > oper;
Agregamos las imágenes a la lista, hay que pasar punteros a las imágenes.
oper.Append(
ptr_ima_1 )
oper.Append(
ptr_ima_2 )
La imagen apuntada por ptr_ima_1 es el acumulador.
Ahora creo el operador de pixeles.
bicotiPixelOperatorBinary<
float > * ptr_pix_op;
ptr_pix_op
= new bicotiPixelOperatorBinaryAddition< float >;
Corro el operador :
oper.Apply( ptr_pix_op );
Al final tendre la suma en ptr_ima_1 sin cambiar ptr_ima_2.
Este proceso para sumar dos imágenes
puede ser muy molesto por la cantidad de objetos que se deben
crear, pero esto permite una flexibilidad
muy grande ya que se puede usar para imágenes de cualquier
dimensión y con cualquier operador
de dos pixeles en uno.
La fachada
de OperatorMultiple provee una forma más sencilla de hacer esta
operación.
Ver más detalles en :