Image Data and Display Rolando V. Raqueño 1 Saturday, March 19, 2016 For Class Consistency % source ~rvrpci/.simg726.rc Rolando V. Raqueño 2 Saturday, March 19, 2016 Quiz #2 Topics • mkdir • chmod • cd • grep • ci and co Rolando V. Raqueño 3 Saturday, March 19, 2016 PBMPLUS FORMAT and xv • Digital image format concepts – PBMPLUS image interchange format. • Displaying digital image – xv image display Rolando V. Raqueño 4 Saturday, March 19, 2016 PBMPLUS Image Data Types • Bilevel Image Data Type – Black and White • Monochrome Image Data Type – Greyscale • RGB Color Image Data Type – Color Rolando V. Raqueño 5 Saturday, March 19, 2016 Two PBMPLUS Representations • All PBMPLUS data formats have the following representations – ASCII Format • (for Human Consumption) – RAW Format • (for Computer Consumption) Rolando V. Raqueño 6 Saturday, March 19, 2016 Displaying Images • Use xv utility for display and documentation purposes. – Note that xv is an X client • Should NEVER be used for image processing – USE ONLY FOR DISPLAY PURPOSES • To invoke xv % xv & % xv filename.pgm & Rolando V. Raqueño 7 Saturday, March 19, 2016 Portable Bit Map (PBM) • Bilevel Image Data Type – (Black and White) • Used to represent printed black and white imagery such as documents and faxes. • Uses 0’s (zeroes) to represent white – (no ink deposited on paper) • Uses 1’s (ones) to represent black – (ink deposited on paper) Rolando V. Raqueño 8 Saturday, March 19, 2016 Let us digress – The vi Problem • vi practice and creation of a bilevel image. • 7”x10” graph paper divided into 10 squares per inch. • Cell not covered by ink – value of zero (0). • Cell fully or partially covered by ink – value of one (1). • You will have a total of 700 pixels to enter. Rolando V. Raqueño 9 Saturday, March 19, 2016 Problem #1 Solution • vi - Brute Force Solution 1. Is the current pixel 0 (zero) or 1 (one)? 2. Type the appropriate character 3. Repeat steps 1 and 2 until done Rolando V. Raqueño 10 Saturday, March 19, 2016 Problem #1 Solution • vi- Smart Solution 1. Type the vi command “70i0” “seventy, i - for insert, 0 (zero)” 2. Hit the ESCAPE key to get you out of insert mode. 3. Type the vi command “o” to open a new line 4. Hit the ESCAPE key to get you out of insert mode. 5. Move back up to the line of zeroes and use the yy (yank command) to make a copy of the line of 70 zeroes. Rolando V. Raqueño 11 Saturday, March 19, 2016 Problem #1 Solution • vi- Smart Solution 6. Type the vi command “p” 10 times 7. Move back up to the top line of zeroes and use the 10yy (yank command) to make a copy of 10 lines of 70 zeroes per line. 8. Type the vi command “p” 10 times 9.You will now have a page of 700 zeroes. Rolando V. Raqueño 12 Saturday, March 19, 2016 Problem #1 Solution • vi- Smart Solution 10. You can navigate to the areas that need to be changed to “1” and use the “R” command to replace contiguous set of characters. 11. Hit the ESCAPE key to get you out of insert mode. 12. Navigate to next section and repeat steps 10 -12 until done. 13. Save the file out and exit vi :wq signature.dat Rolando V. Raqueño 13 Saturday, March 19, 2016 Yet another vi Digression • To show line number in vi, execute the following command :set number • To disable line numbers in vi, execute the following command :set nonumber Rolando V. Raqueño 14 Saturday, March 19, 2016 Viewing current vi settings :set all noautoindent autoprint noautowrite nobeautify directory=/var/tmp noedcompatible noerrorbells noexrc flash hardtabs=8 noignorecase nolisp nolist magic mesg Rolando V. Raqueño nomodelines noshowmode nonumber noslowopen nonovice tabstop=8 nooptimize taglength=0 paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags prompt tagstack noreadonly term=vt220 redraw noterse remap timeout report=5 ttytype=vt220 scroll=11 warn sections=NHSHH HUuhsh+c window=23 shell=/bin/csh wrapscan shiftwidth=8 wrapmargin=0 noshowmatch nowriteany 15 Saturday, March 19, 2016 Saving vi Preferences • Preferences such as :set number can be saved in the file .exrc in your home directory (~) Rolando V. Raqueño 16 Saturday, March 19, 2016 A vi Command to Always Remember • To replace all occurrences or a string in a file with new string. :%s/string1/string2/g OR :%s/string1/string2/gc (Will ask you for confirmation) Rolando V. Raqueño 17 Saturday, March 19, 2016 The Super-smart Solution • In UNIX % repeat 70 echo -n 0 >> one_line; echo >> one_line; repeat 100 cat one_line >> signature.dat Rolando V. Raqueño 18 Saturday, March 19, 2016 Let’s Create another image • Put the signature.dat away for the time being and create a simpler image • Call it bilevel.pbm Rolando V. Raqueño 19 Saturday, March 19, 2016 Portable Bit Map (PBM) • Bilevel Image Data Type – For the ASCII file format, the file header is given by P1 – width and height of the image. – Comments are indicated by the # character P1 # This is a 16 column x 3 row # PBM ASCII image # Created by using vi 16 3 001010100011010000111110 010010000101001001011100 Rolando V. Raqueño 20 Saturday, March 19, 2016 Portable Bit Map (PBM) • Make a copy of bilevel.pbm and edit the copy to look like the following, P1 #This is a 16 column x 3 row PBM ASCII #image # 16 3 0010101000110100 0011111001001000 0101001001011100 Rolando V. Raqueño 21 Saturday, March 19, 2016 Portable Bit Map (PBM) • When displayed looks like P1 # This is a 16 column x 3 row PBM ASCII # image # 16 3 0010101000110100 0011111001001000 0101001001011100 Rolando V. Raqueño 22 Saturday, March 19, 2016 How to Add a PBMPLUS Header to an Image File • If its an ASCII file you can use vi • Use the cat command to concatenate a header from a file or the keyboard (standard input - stdio) Rolando V. Raqueño 23 Saturday, March 19, 2016 Put a header on signature.dat and display in xv • Method #1 – Using a text editor, input the appropriate header values. Rolando V. Raqueño 24 Saturday, March 19, 2016 Put a header on signature.dat and display in xv • Method #2 – Edit a file called header.dat containing the header information – Concatenate the header file at the beginning of signature.dat using the cat command % cat header.dat signature.dat > signature.pbm Rolando V. Raqueño 25 Saturday, March 19, 2016 Put a header on signature.dat and display in xv • Method #3 – Concatenate the header data from the keyboard directly to the beginning of signature.dat using the cat command % cat - signature.dat > signature.pbm P1 70 100 ^D Rolando V. Raqueño 26 Saturday, March 19, 2016 Portable Bit Map (PBM) • There is also a binary version of the PBM image type which uses a P4 header such as the one below P4 # This is a 16 column x 3 row PBM RAW # image 16 3 *4>HR\ Rolando V. Raqueño 27 Saturday, March 19, 2016 Portable Grey Map (PGM) • Monochrome Image Data Type (Greyscale) – Displayed greyscale imagery – Grey values brightness. – Convention opposite that of the PBM format Rolando V. Raqueño 28 Saturday, March 19, 2016 Portable Grey Map (PGM) • Monochrome Image Data Type (Greyscale) – EXAMPLE, P2 # This is a 3 column x 2 row PGM ASCII image # With a possible maximum grey value of 255 3 2 255 42 52 62 72 82 92 Rolando V. Raqueño 29 Saturday, March 19, 2016 Portable Grey Map (PGM) • When displayed, the image is shown below P2 # This is a 3 column x 2 row PGM ASCII image # With a possible maximum grey value of 255 3 2 255 42 52 62 72 82 92 Rolando V. Raqueño 30 Saturday, March 19, 2016 Portable Grey Map (PGM) • There is also a binary version of the PGM image type which uses a P5 header such as the one below P5 # This is a 3 column x 2 row PGM Raw # image 3 2 255 *4>HR\ Rolando V. Raqueño 31 Saturday, March 19, 2016 Portable Pixel Map (PPM) • RGB Color Image Data Type (Color) – Red, Green, and Blue bands – Arranged in pixel-interleaved format or band interleaved by pixel (BIP) Rolando V. Raqueño 32 Saturday, March 19, 2016 Portable Pixel Map (PPM) • RGB Color Image Data Type (Color) – For the ASCII file format, • P3 • width, height • maximum grey level possible of the image – The pixel values are given as a triple representing the red, green, and blue components . Rolando V. Raqueño 33 Saturday, March 19, 2016 Portable Pixel Map (PPM) • RGB Color Image Data Type (Color) – EXAMPLE, P3 3 3 255 255 0 0 128 0 0 0 0 0 Rolando V. Raqueño 0 255 0 0 128 0 128 128 128 34 0 0 255 0 0 128 255 255 255 Saturday, March 19, 2016 PPM QUESTION So what does the data *4>HR\ look like as a Raw PPM Image? Rolando V. Raqueño 35 Saturday, March 19, 2016 Conversion of Raw Files to PBMPLUS Format • Alternative to manually prepending a header file using cat command rawtopbm, rawtopgm, or rawtoppm % rawtopgm 256 256 ~rvrpci/pub/MyCat_P5.raw > MyCat.pgm Rolando V. Raqueño 36 Saturday, March 19, 2016 Usage Note About PBMPLUS Commands • PBMPLUS commands heavily use the UNIX redirection and piping • To get help use -h option. % rawtopgm -h usage: rawtopgm [-headerskip N] [rowskip N] [-tb|-topbottom] [<width> <height>][rawfile] Rolando V. Raqueño 37 Saturday, March 19, 2016 Converting PNM Image File to Another Format • PNM is a generic designator for all PBM, PGM, and PPM • Convert a PBMPLUS format file into a TIFF – e.g., signature.pbm to signature.tiff. • Use the following command % pnmtotiff -none signature.pbm > signature.tiff -none option means not invoke LZW image compression. Rolando V. Raqueño 38 Saturday, March 19, 2016 Rudimentary Image Processing Using the PBMPLUS Utilities • Requires that all input be in some form of PBM, PGM, PPM image • Supposed we wanted to enlarge a tiff file ( e.g., signature.tiff) by a scale factor of 2x and then convert it to a SUN raster file. TIFF FILE Rolando V. Raqueño PNM FILE 2X Scale 39 PNM FILE RAST FILE Saturday, March 19, 2016 Rudimentary Image Processing Using the PBMPLUS Utilities • The previous process can actually be executed in one UNIX command % tifftopnm signature.tiff | pnmscale 2.0 | pnmtorast > signature.rast • In fact you can pipe the information directly to xv before writing it out to another format % tifftopnm signature.tiff | pnmscale 2.0 | pnmtorast | xv Rolando V. Raqueño 40 Saturday, March 19, 2016 PBMPLUS File Information • Supposed you wanted to know what the characteristics are of a particular PBMPLUS file you can give the following command % pnmfile MyCat.pgm MyCat.pgm: PGM raw, 256 by 256 Rolando V. Raqueño 41 maxval 255 Saturday, March 19, 2016 PBMPLUS Histogram Utilities • Greyscale histogram pgmhist • Color histogram ppmhist Rolando V. Raqueño 42 Saturday, March 19, 2016 Cutting out regions of interest % pnmcut usage: pnmcut x y width height [pnmfile] % pnmcrop usage: pnmcrop [-white|-black] [-left] [-right] [-top] [bottom] [pnmfile] Rolando V. Raqueño 43 Saturday, March 19, 2016 Pasting or Arranging Images % pnmcat pnmcat [-white|-black] leftright|-lr [-jtop|-jbottom] pnmfile pnmfile ... % pnmpaste pnmpaste [-replace|-or|-and |xor] frompnmfile x y [intopnmfile] Rolando V. Raqueño 44 Saturday, March 19, 2016 You have a bunch of images... % pnmindex pnmindex [-size N] [-across N] [-colors N] [-black] pnmfile ... Rolando V. Raqueño 45 Saturday, March 19, 2016 Color Bands Combination and Extraction % rgb3ppm rgb3toppm redpgmfile greenpgmfile bluepgmfile % ppmtorgb3 ppmtorgb3 [ppmfile] • results in .red .grn .blu Rolando V. Raqueño 46 Saturday, March 19, 2016 Spatial Operations • pnmconvol • pnmscale • pnmrotate • pnmflip • pnmshear Rolando V. Raqueño 47 Saturday, March 19, 2016 Greyscale/Color Operations • ppmquant • pnmdepth • ppmdither Rolando V. Raqueño 48 Saturday, March 19, 2016 Really Useful Stuff • Doing Screen Captures under X % xwd | xwdtopnm | pnmdepth 255 | pnmtotiff > screen.tif • Your cursor will turn into crosshairs • Click on the window you want to capture Rolando V. Raqueño 49 Saturday, March 19, 2016 Screen Capture through xv • Click on grab button • Specify a time delay • Left button grabs window • Middle button grabs a rectangle • Right button cancels Rolando V. Raqueño 50 Saturday, March 19, 2016 Getting Hardcopy Output • Determining what type of display device you have IDL> help,/device Available graphics_devices: CGM HP MAC NULL PCL PS Z Current graphics device: MAC Macintosh Quickdraw Driver Screen Resolution: 640x442 Physical Color Map Entries (Used / Total): 220 / 256 Current Window Number: 0, size: (320,240) type: Window. Graphics Function: 3 (copy) Current Font: Chicago Default Backing Store: Pixmap. Window Status: 0: Window 320x240 (Retained) Rolando V. Raqueño 51 Saturday, March 19, 2016 Getting Hardcopy Output • To get a postscript output of your plot IDL> IDL> IDL> IDL> IDL> set_plot,’ps’ device, Filename=‘new_plot.ps’ plot, my_data,Title=‘Imaging Lab 1’ device, /close $lpr -Pdip new_plot.ps • You then want to return your output device to whatever display device you had originally IDL> set_plot,’MAC’ Rolando V. Raqueño 52 Saturday, March 19, 2016 Check Your Postscript File Before Sending to the Printer • You can use the ghostview utility to view a postscript file Rolando V. Raqueño 53 Saturday, March 19, 2016 Note Well • Always make sure that the printer to which you will be sending your job is capable of talking Postscript. If it does not, you will be killing many trees. • To find out the status of your job % lpq -P(printer name) • To kill a print job % lprm -P(printer name) job_number Rolando V. Raqueño 54 Saturday, March 19, 2016 Getting Encapsulated Postscript File (EPS) • To get a postscript file of your plot that you can include into another document IDL> IDL> IDL> IDL> IDL> set_plot,’ps’ device, /encapsulated, /preview device, Filename=‘new_plot.eps’ plot, my_data,Title=‘Imaging Lab 1’ device, /close • The above process creates what is known as an Encapsulated Postscript File (EPS) Rolando V. Raqueño 55 Saturday, March 19, 2016 Rolando V. Raqueño 56 Saturday, March 19, 2016