Image representation and manipulation
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

Image Representation and Manipulation PowerPoint PPT Presentation


  • 73 Views
  • Uploaded on
  • Presentation posted in: General

Image Representation and Manipulation. CS302 Data Structures Prof. George Bebis http://www.cse.unr.edu/CVL. 0. 255. How are images represented?. 8 bits/pixel. Color images. A Simple model of image formation. The scene is illuminated by a single source.

Download Presentation

Image Representation and Manipulation

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Image representation and manipulation

Image Representation and Manipulation

CS302 Data Structures

Prof. George Bebis

http://www.cse.unr.edu/CVL


How are images represented

0

255

How are images represented?

8 bits/pixel


Color images

Color images


A simple model of image formation

A Simple model of image formation

  • The scene is illuminated by a single source.

  • The scene reflects radiation towards the camera.

  • The camera senses the light (i.e., through solid state cells for CCD cameras)


Ccd charged coupled device cameras

CCD (Charged-Coupled Device) cameras

  • Tiny solid state cells convert light energy into electric charge which is then digitized (A/D conversion).


Image file formats

Image file formats

  • Many image formats adhere to the following simple model:

    • Header

    • Data (line by line, no breaks between lines)


Image file formats cont

Image file formats (cont.)

  • Header contains at least:

    • A signature or “magic number” (i.e., a short sequence of bytes for identifying the file format).

    • The width and height of the image.


Common image file formats

Common image file formats

  • PGM (Portable Gray Map)

  • PNG (Portable Network Graphics)

  • GIF (Graphic Interchange Format) -

  • JPEG (Joint Photographic Experts Group)

  • TIFF (Tagged Image File Format)

  • FITS (Flexible Image Transport System)


Pgm format

PGM format

  • A popular format for grayscale images (8 bits/pixel)

  • Closely-related formats are:

    • PBM (Portable Bitmap), for binary images (1 bit/pixel)

    • PPM (Portable Pixelmap), for color images (24 bits/pixel)

      • ASCII or binary (raw) storage

ASCII

Binary


Image class

Image Class

  • class ImageType {

  • public:

  • ImageType(); // constructor

  • ~ImageType(); // destructor

  • void getImageInfo(int&, int&, int&);

  • void setImageInfo(int, int, int);

  • void setPixelVal(int, int, int);

  • void getPixelVal(int, int, int&);

  • // more functions ...

  • private:

  • int N, M, Q; //N: # rows, M: # columns

  • int **pixelValue;

  • };


Input output functions

Input / Output Functions

  • C++ routine to read the header of a PGM image:

    ReadImageHeader.cpp

  • C++ routine to read a PGM image:

    ReadImage.cpp

  • C++ routine to write a PGM image:

    WriteImage.cpp


An example threshold cpp

An example - Threshold.cpp

  • void readImageHeader(char[], int&, int&, int&, bool&);

  • void readImage(char[], ImageType&);

  • void writeImage(char[], ImageType&);

  • void main(int argc, char *argv[])

  • {

  • int i, j, M, N, Q;

  • bool type;

  • int val, thresh;

  • // read image header

  • readImageHeader(argv[1], N, M, Q, type);

  • // allocate memory for the image array

  • ImageType image(N, M, Q);


Threshold cpp cont d

Threshold.cpp (cont’d)

  • // read image

  • readImage(argv[1], image);

    cout << "Enter threshold: ";

  • cin >> thresh;

  • // threshold image

    for(i=0; i<N; i++)

  • for(j=0; j<M; j++) {

  • image.getVal(i, j, val);

  • if(val < thresh)

  • image.setVal(i, j, 255);

  • else

  • image.setVal(i, j, 0);

  • }

  • // write image

  • writeImage(argv[2], image);

  • }


Reading writing pgm images

Reading/Writing PGM images

(2D array of int)

(1D array of unsigned char)

Use “write”

(1D array of unsigned char)

(2D array of int)

Use “read”


Writing a pgm image to a file

Writing a PGM image to a file

  • void writeImage(char fname[], ImageType& image)

  • int N, M, Q;

  • unsigned char *charImage;

  • ofstream ofp;

  • image.getImageInfo(N, M, Q);

  • charImage = (unsigned char *) new unsigned char [M*N];

  • // convert integer values to unsigned char

  • int val;

  • for(i=0; i<N; i++)

  • for(j=0; j<M; j++)

  • image.getVal(i, j, val);

  • charImage[i*M+j]=(unsigned char)val;

  • }


Writing a pgm image cont d

Writing a PGM image... (cont’d)

  • ofp.open(fname, ios::out | ios::binary);

  • if (!ofp) { cout << "Can't open file: " << fname << endl; exit(1); }

  • ofp << "P5" << endl;

  • ofp << M << " " << N << endl;

  • ofp << Q << endl;

  • ofp.write( reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char));

  • if (ofp.fail()) { cout << "Can't write image " << fname << endl; exit(0); }

  • ofp.close();

  • }


Reading a pgm image from a file

Reading a PGM image from a file

  • void readImage(char fname[], ImageType& image)

  • {

  • int i, j;

  • int N, M, Q;

  • unsigned char *charImage;

  • char header [100], *ptr;

  • ifstream ifp;

  • ifp.open(fname, ios::in | ios::binary);

  • if (!ifp) {

  • cout << "Can't read image: " << fname << endl;

  • exit(1);

  • }


Reading a pgm image from a file1

Reading a PGM image from a file

  • // read header

  • ifp.getline(header,100,'\n');

  • if ( (header[0]!=80) || // 'P'

  • (header[1]!=53) ) { // '5'

  • cout << "Image " << fname << " is not PGM" << endl;

  • exit(1);

  • }

  • ifp.getline(header,100,'\n'); // skip comments

  • while(header[0]=='#')

  • ifp.getline(header,100,'\n');

  • M=strtol(header,&ptr,0); // read M, N

  • N=atoi(ptr);


Reading a pgm image cont d

Reading a PGM image …. (cont’d)

  • ifp.getline(header,100,'\n');

  • Q=strtol(header,&ptr,0);

  • charImage = (unsigned char *) new unsigned char [M*N];

  • ifp.read( reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char));

  • if (ifp.fail()) {

  • cout << "Image " << fname << " has wrong size" << endl;

  • exit(1);

  • }

  • ifp.close();


Reading a pgm image cont d1

Reading a PGM image…(cont’d)

  • // Convert unsigned characters to integers

  • int val;

  • for(i=0; i<N; i++)

  • for(j=0; j<M; j++) {

  • val = (int)charImage[i*M+j];

  • image.setVal(i, j, val);

  • }

  • }


How do i see images on my computer

How do I “see” images on my computer?

  • Unix/Linux: xv, gimp

  • Windows: Photoshop

    Irfanview


How do i convert an image from one format to another

How do I convert an image from one format to another?

  • Use “Save As” option


  • Login