Multichannel and Color Image Program ExampleMultichannel images in Visionx are implemented by overloading the x-dimension of the image array structure. Multichannel images are identified by the x-range of the index being set to an exact multiple of the x-range in the bounding box.A VisionX image may have any number of channels depending upon the application. Typical examples are three for color images and two for complex numbers. vcmean.c
/*********************************************************************/
/* vcmean Compute channel mean */
/*********************************************************************/
#include "VisXV4.h" /* VisionX structure include file */
#include "Vutil.h" /* VisionX utility header files */
VXparam_t par[] = /* command line structure */
{
{ "if=", 0, " input file vthresh: threshold images"},
{ "of=", 0, " output file "},
{ 0, 0, 0}
};
#define INIMAGE par[0].val
#define OUTIMAGE par[1].val
int main(int argc, char** argv)
{
Vfstruct (im);
Vfstruct (om);
int x, y, c;
int thresh;
int chan, sum;
VXparse(&argc, &argv, par); /* parse the command line */
while ( Vfread( &im, INIMAGE) ) {
if ( im.type != VX_PBYTE ) {
fprintf (stderr, "error: image not byte type\n");
exit (1);
}
Vfnewim (&om, VX_PBYTE, im.bbx, 1);
for ( y = om.ylo; y <= om.yhi; y++) {
for ( x = om.xlo; x <= om.xhi; x++) {
sum = 0;
for ( c = 0; c < im.chan; c++) {
sum = sum + im.u[y][x * im.chan + c];
}
om.u[y][x] = sum / im.chan;
}
}
Vfwrite( &im, OUTIMAGE);
}
exit(0);
}
Notes.
imm.u[0][0] corresponds to the first channel of the first pixel imm.u[0][1] corresponds to the second channel of the first pixel. imm.u[0][3] corresponds to the first channel of the second pixel. |