1 / 22

Image Representation and Manipulation

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.

faith
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Image Representation and Manipulation CS302 Data Structures Prof. George Bebis http://www.cse.unr.edu/CVL

  2. 0 255 How are images represented? 8 bits/pixel

  3. Color images

  4. 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)

  5. CCD (Charged-Coupled Device) cameras • Tiny solid state cells convert light energy into electric charge which is then digitized (A/D conversion).

  6. Image file formats • Many image formats adhere to the following simple model: • Header • Data (line by line, no breaks between lines)

  7. 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.

  8. 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)

  9. 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

  10. 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; • };

  11. 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

  12. 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);

  13. 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); • }

  14. 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”

  15. 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; • }

  16. 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(); • }

  17. 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); • }

  18. 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);

  19. 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();

  20. 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); • } • }

  21. How do I “see” images on my computer? • Unix/Linux: xv, gimp • Windows: Photoshop Irfanview

  22. How do I convert an image from one format to another? • Use “Save As” option

More Related