rolando v. raqueñofriday, june 19, 2015 1 twas the lecture before holiday break readings present...
Post on 20-Dec-2015
213 views
TRANSCRIPT
Rolando V. Raqueño Tuesday, April 18, 202311
Twas the Lecture Before Holiday Break
Readings
Present
Makefiles
Image Array Manipulation and I/O
Simple Widget Programs
Rolando V. Raqueño Tuesday, April 18, 202322
Holiday Reading
• The Cuckoo’s Egg (Gift Quiz Material)
References for doing homework and final project• Gumley Chapters
– 2, 3.1-3.2,4.1-4.4 (programming)– 7.1-7.5 (displaying images)– 9.1-9.3 (GUI programming)
• UNIX Power Tools Chapters– 48-51
Rolando V. Raqueño Tuesday, April 18, 202333
netpbm.tgz
netpbm.tgzThis is the package that contains the entire PBMPLUS (also known as netpbm) and is distributed in a format known as
Compressed TAR File or
gzipped TAR file
Rolando V. Raqueño Tuesday, April 18, 202344
present.tgz
• To illustrate how to process these types of files, there is a file called simpler file (present.tgz) which can be accessed via anonymous ftp from
% ftp ftp.cis.rit.edu
Rolando V. Raqueño Tuesday, April 18, 202355
Anonymous ftp session login
% ftp ftp.cis.rit.edu
Name (ftp.cis.rit.edu:rvrpci): anonymous
331 Guest login ok, send your complete e-mail address as password.
Password:
Rolando V. Raqueño Tuesday, April 18, 202377
ftp session change directory
ftp> cd people/rolo/simg726250 "/people/rolo/simg726" is new cwd.ftp> ls200 PORT command successful.150 Opening ASCII mode data connection for /bin/ls.
Makefile_example.tgzfortran_stats.tgzpresent.tgz226 Listing completed.54 bytes received in 0.015 seconds (3.50 Kbytes/s)
Rolando V. Raqueño Tuesday, April 18, 202388
ftp file transfer type
ftp> ascii
200 Type okay.
ftp> binary
200 Type okay.
Rolando V. Raqueño Tuesday, April 18, 202399
ftp getting a single file
ftp> get present.tgz
200 PORT command successful.
150 Opening ASCII mode data connection for present.tgz (1211 bytes).
226 Transfer completed.
local: present.tgz remote: present.tgz
1219 bytes received in 0.015 seconds (80.45 Kbytes/s)
Rolando V. Raqueño Tuesday, April 18, 20231010
Getting multiple files
ftp> promptInteractive mode off.ftp> hashHash mark printing on (8192 bytes/hash mark).
ftp> mget *.tgz200 PORT command successful.150 Opening ASCII mode data connection for Makefile_example.tgz (31544 bytes).
##
Rolando V. Raqueño Tuesday, April 18, 20231212
Most common ftp mistake
• Sending a binary file under ASCII mode
• Result– Characters not conforming to the ASCII
character set are removed
• ALWAYS– Check the size of the source file and the
transferred file
Rolando V. Raqueño Tuesday, April 18, 20231313
Uncompressing and UnTAR
• To uncompress the file% gunzip present.tgz
• To extract the contents of the tar file% tar xvf present.tar
• Challenge - look at the file xmas.c and figure out what it does% cd present% more xmas.c
Rolando V. Raqueño Tuesday, April 18, 20231414
Compiling the Package
• To compile or build the package, a Makefile is typically present which is an automatic mechanism to compile all the files and place them in the proper locations% make
• To run the program% xmas
Rolando V. Raqueño Tuesday, April 18, 20231515
What is a Makefile
• A makefile is a description of how to build “things” in UNIX
• Automates the creation of “stuff”
• It is different from a script or batch file– Describes the relationship of components
to the resulting object– Keeps track of intermediate results and
their age
Rolando V. Raqueño Tuesday, April 18, 20231616
Other Makefile examples
• Makefile_example.tgz• Fortran_stats.tgz
Rolando V. Raqueño Tuesday, April 18, 20231717
Makefile_example
• Take a raw file -> convert to pgm image
• Take pgm image -> rotate image
• Take rotated image -> label image
• Makefiles work on file dependencies
Rolando V. Raqueño Tuesday, April 18, 20231818
[Mm]akefile% more MakefileMyCat_labeled.pgm : MyCat_rotated.pgm label.dat ppmlabel -x 0 -y 200 -file label.dat
MyCat_rotated.pgm > MyCat_labeled.pgm
MyCat_rotated.pgm : MyCat.pgm pnmrotate 45 MyCat.pgm > MyCat_rotated.pgm
MyCat.pgm : MyCat.raw rawtopgm 256 256 MyCat.raw > MyCat.pgm
clean: rm MyCat_labeled.pgm MyCat_rotated.pgm MyCat.pgm
Rolando V. Raqueño Tuesday, April 18, 20231919
If a file is out of date…
• If you edit a file and update it, the makefile will know
• Example– Edit label.dat to some other new text– Type make again– Look at the image
Rolando V. Raqueño Tuesday, April 18, 20232020
Fortran_stats example
• Compile a fortran program that computes the mean of 1,2,3,4,5
• To compile the program% make
• To run the program% stats
Rolando V. Raqueño Tuesday, April 18, 20232121
Fortran_stats
% more Makefilestats : main.o sum.o mean.o g77 -o stats main.o sum.o mean.o main.o : main.f g77 -c main.fsum.o : sum.f g77 -c sum.fmean.o : mean.f g77 -c mean.fclean: rm *.o
Rolando V. Raqueño Tuesday, April 18, 20232222
Fortran_stats% more MakefileFORTRAN = g77stats : main.o sum.o mean.o $(FORTRAN) -o stats main.o sum.o mean.o main.o : main.f $(FORTRAN) -c main.fsum.o : sum.f $(FORTRAN) -c sum.fmean.o : mean.f $(FORTRAN) -c mean.fclean: rm *.o
Rolando V. Raqueño Tuesday, April 18, 20232323
Typical unreadable makefile
% more makefileFORTRAN = g77OBJS = main.o mean.o sum.o.f.o: $(FORTRAN) -c $*.fstats: $(OBJS) $(FORTRAN) -o stats $(OBJS)clean: rm *.o
Rolando V. Raqueño Tuesday, April 18, 20232525
Array Manipulation in IDL
• Let’s create an array representing a multiband imageIDL> image=bindgen(2,3,4)
IDL> print,image
0 1
2 3
4 5
Rolando V. Raqueño Tuesday, April 18, 20232626
Array Manipulation in IDL• image continued
6 7 8 9
10 11
12 13
14 15
16 17
Rolando V. Raqueño Tuesday, April 18, 20232727
Array Manipulation in IDL
• image continued
18 19
20 21
22 23
Rolando V. Raqueño Tuesday, April 18, 20232828
Array Manipulation in IDL• Extract the first and last band of the image
IDL> print,image(*,*,0)
0 1
2 3
4 5
IDL> print,image(*,*,3)
18 19
20 21
22 23
Rolando V. Raqueño Tuesday, April 18, 20232929
Array Manipulation in IDL• Extract the first and last band of the image
simultaneouslyIDL> print,image(*,*, [0,3] ) 0 1 2 3 4 5
18 19 20 21 22 23
Rolando V. Raqueño Tuesday, April 18, 20233030
Array Manipulation in IDL
• Extracting the “color” or “spectral vector” of the first pixelIDL> print,image(0,0,*)
0
6
12
18
Rolando V. Raqueño Tuesday, April 18, 20233131
Array Manipulation in IDL
• Assign band 1 to band 4IDL> band1=image(*,*,0)
IDL> image(*,*,3) = band1
• ShortcutIDL> image(*,*,3)=image(*,*,0)
Rolando V. Raqueño Tuesday, April 18, 20233232
Array Manipulation in IDL• Subsectioning parts of an image
IDL> print,image(0:1,0:1,*) 0 1 2 3
6 7 8 9
12 13 14 15
0 1 2 3
Rolando V. Raqueño Tuesday, April 18, 20233333
Array Manipulation
• where function to find indices of elements that meet certain criteriaIDL> print, where( image gt 5 and image lt 12)
• Use of other arrays to index other arraysIDL> indices=where(image gt 5 and image lt 12)
IDL> image(indices)=-1
Rolando V. Raqueño Tuesday, April 18, 20233535
Reading & Writing Data Files
• IDL can read many types of file formats
• Files can be categorized into two general types– Formatted ( Readable Text & Numbers,
ASCII)– Unformatted( Images)
Rolando V. Raqueño Tuesday, April 18, 20233636
Reading & Writing Data Files
• The three IDL commands we can use for opening files are as follows
openr (open a file for reading)
openw (open a file for writing)
openu (open a file for reading/writing)
Rolando V. Raqueño Tuesday, April 18, 20233838
Syntax for Opening Data Files
• Example command for opening a file for inputIDL> openr, 1, ‘sample_data_1.dat’
– The argument 1 is referred to as the logical unit number (also known as a file handle)
‘sample_data_1.dat’ is the input file name
Rolando V. Raqueño Tuesday, April 18, 20233939
Reading the Data
• Need to allocate the array to read in the dataIDL> a=fltarr( 12)
ORIDL> a=fltarr( 2, 6)
• Read in the data using the readf statementIDL> readf, 1, a
Rolando V. Raqueño Tuesday, April 18, 20234040
Closing the Data File
• To close the data file you can give the following commandIDL> close, 1
• A common mistake is to try to open a file(s) that is already open causing the error
% OPENR: File unit is already open: 1.% Execution halted at $MAIN$ (OPENR)• Solution
IDL> close, /all
Rolando V. Raqueño Tuesday, April 18, 20234141
Putting it all together
IDL> openr, 1, ‘sample_data_1.dat’
IDL> a = fltarr( 2,12)
IDL> readf, 1, a
IDL> close, 1
IDL> print, a
Rolando V. Raqueño Tuesday, April 18, 20234242
Another Way of Reading in a File
IDL> openr, lun, ‘sample_data_1.dat’, $
/get_lun
IDL> a = fltarr( 2, 6 )
IDL> readf, lun, a
IDL> free_lun, lun
IDL> print, a
Rolando V. Raqueño Tuesday, April 18, 20234343
Yet Another Way
IDL> file_name = ‘sample_data_1.dat’
IDL> a = fltarr( 2, 6 )
IDL> openr, lun, file_name, /get_lun
IDL> readf, lun, a
IDL> free_lun, lun
IDL> print, a
Rolando V. Raqueño Tuesday, April 18, 20234444
To Output a Formatted FileIDL> b = bindgen( 3, 2)*10+42
IDL> openw, lun, ‘test_output.dat’, $
/get_lun
IDL> printf, lun, b
IDL> free_lun, lun
Rolando V. Raqueño Tuesday, April 18, 20234646
To Output an Unformatted File
IDL> b = bindgen( 3, 2)*10+42
IDL> openw, lun, ‘test_output.dat’,$
/get_lun
IDL> writeu, lun, b
IDL> free_lun, lun
Rolando V. Raqueño Tuesday, April 18, 20234747
test_output.dat*4>HR\
• Why? Because ...
* - has an ASCII value of 42 decimal
4 - has an ASCII value of 52 decimal
> - has an ASCII value of 62 decimal
H - has an ASCII value of 72 decimal
R - has an ASCII value of 82 decimal
\ - has an ASCII value of 92 decimal
Rolando V. Raqueño Tuesday, April 18, 20235050
Testing Out Your or Somebody Else’s Image I/O Routines
• Read in a small test image
IDL> a=Read_P2_Image(“test_input.pgm”)• Write out the small test image
IDL> Write_P2_Image,“test_output.pgm”,a
• Read in the small test image you just wroteIDL> b=Read_P2_Image(“test_output.pgm”)
• Statistics (sum, mean, etc.) must be equal• Finally, sum_squares( a - b ) must be 0.0
Rolando V. Raqueño Tuesday, April 18, 20235151
Multiband Image Pixel Ordering
• Band Sequential
array( column, row, band)
array( sample, line, band)• Band Interleaved by Line
array( column, band, row )
array( sample, band, line)• Band Interleaved by Pixel
array( band, column, row )
array( band, sample, line )
Rolando V. Raqueño Tuesday, April 18, 20235252
Multiband Image Pixel Ordering
• Let us take the following file• test_data.dat
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
• And look at the different interleaving representations as a multiband image.
Rolando V. Raqueño Tuesday, April 18, 20235353
Band Sequential Example
• If we read in the test_data.dat using the array defined as a=bindgen(2,3,4), we would get
Band 0 Band 1 Band 2 Band 30 1 6 7 12 13 18 19
2 3 8 9 14 15 20 21
4 5 10 11 16 1722 23
Rolando V. Raqueño Tuesday, April 18, 20235454
Band Interleaved by Line
• If we read in test_data.dat using the array defined as a=bindgen(2,4,3), we would get
Band 0Band 1 Band 2 Band 30 1 2 3 4 5 6 7
8 9 10 11 12 1314 15
16 17 18 19 20 2122 23
Rolando V. Raqueño Tuesday, April 18, 20235555
Band Interleaved by Pixel
• If we read in test_data.dat using the array defined as a=bindgen(4,2,3), we would get
Band 0 Band 1 Band 2 Band 30 4 1 5 2 6 3 7
8 12 9 13 10 14 11 15
16 20 17 21 18 2219 23
Rolando V. Raqueño Tuesday, April 18, 20235656
Reform/Transpose Conversion
• To convert previous examples from BSQ to BIL, we can use the following command
• Assume a BSQ image a=bindgen(2,3,4)IDL> b = reform( a, 2, 4, 3 )
IDL> c = transpose( b, [0, 2, 1] )
• The image c is now a BIL image
Rolando V. Raqueño Tuesday, April 18, 20235757
Reform/Transpose Conversion
• To convert previous examples from BSQ to BIP, we can use the following command
• Assume a BSQ image a=bindgen(2,3,4)IDL> b = reform( a, 4, 2, 3 )
IDL> c = transpose( b, [1, 2, 0] )
• The image c is now a BIP image
Rolando V. Raqueño Tuesday, April 18, 20235959
Widget
• What is a widget?– It is a graphical user interface component
• Basic IDL Widget Toolkit– Widget_Base, Widget_Button– Widget_Draw, Widget_DropList– Widget_Label, Widget_List– Widget_Slider, Widget_Text
Rolando V. Raqueño Tuesday, April 18, 20236060
Widget_Base
• This widget type is used to hold other widget types. You can think of this as your blank canvas. It is also known as the “parent window” in other terms.
• To invoke a widget base, you would give the following commands
IDL> base = Widget_Base()
IDL> Widget_Control, base, /realize
Rolando V. Raqueño Tuesday, April 18, 20236161
What the IDL Commands Mean
• base = Widget_Base()– In this function call, base will contain a unique
identifier (ID) to this specific instance of a blank window. The window is still described in memory, but not displayed
• Widget_Control, base, /realize– This tells IDL to display the entity with the ID
value in the variable base
Rolando V. Raqueño Tuesday, April 18, 20236262
Result of the Widget_Base
• You should see a blank window similar to the one below
Rolando V. Raqueño Tuesday, April 18, 20236363
Other Widget Types
• To invoke a Widget_ButtonIDL> button1 = Widget_Button( base )
IDL> Widget_Control, base, /realize
Rolando V. Raqueño Tuesday, April 18, 20236464
To Change the Title of a Button Widget
IDL>Widget_Control,button1,Set_Value=“OK”
Rolando V. Raqueño Tuesday, April 18, 20236565
Destroying a Widget
IDL> Widget_Control,button1,/destroy
Rolando V. Raqueño Tuesday, April 18, 20236666
To Destroy the Base Widget
IDL> Widget_Control,base,/destroy– If there are any widgets attached to the base,
those children widgets will also be destroyed.
Rolando V. Raqueño Tuesday, April 18, 20236767
Other Widget Examples
IDL> base=widget_base(column=1)
IDL> button=widget_button(base)
IDL> label=widget_label(base)
IDL> widget_control,base,/realize
Rolando V. Raqueño Tuesday, April 18, 20236868
Other Widget Examples
IDL> base1=widget_base(column=1)
IDL> list1=widget_list(base1)
IDL> slider1=widget_slider(base1)
IDL> widget_control, base1, /realize
Rolando V. Raqueño Tuesday, April 18, 20236969
Adding to the Previous Example
IDL> base2=widget_base(base1,row=2)
IDL> button1=widget_button(base2, value="First Button")
IDL> button2=widget_button(base2, value="Second Button")
IDL> widget_control,base1,/realize
Rolando V. Raqueño Tuesday, April 18, 20237070
Modifying Previous Example
IDL> widget_control,slider1,set_value=100
IDL> widget_control,base1,/realize
IDL> widget_control,button2,set_value=
"Last Button"
Rolando V. Raqueño Tuesday, April 18, 20237171
Getting Information from a Widget
IDL>widget_control,button1,get_value=button_value
IDL>print,button_value
First Button