twas the lecture before holiday break

72
Twas the Lecture Before Holiday Break Readings Present Makefiles Image Array Manipulation and I/O Simple Widget Programs

Upload: meris

Post on 11-Jan-2016

16 views

Category:

Documents


0 download

DESCRIPTION

Twas the Lecture Before Holiday Break. Readings Present Makefiles Image Array Manipulation and I/O Simple Widget Programs. 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) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Twas the Lecture  Before Holiday Break

Twas the Lecture Before Holiday Break

Readings

Present

Makefiles

Image Array Manipulation and I/O

Simple Widget Programs

Page 2: Twas the Lecture  Before Holiday Break

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

Page 3: Twas the Lecture  Before Holiday Break

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

Page 4: Twas the Lecture  Before Holiday Break

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

Page 5: Twas the Lecture  Before Holiday Break

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:

Page 6: Twas the Lecture  Before Holiday Break

Most important ftp command

ftp> ?

Page 7: Twas the Lecture  Before Holiday Break

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)

Page 8: Twas the Lecture  Before Holiday Break

ftp file transfer type

ftp> ascii

200 Type okay.

ftp> binary

200 Type okay.

Page 9: Twas the Lecture  Before Holiday Break

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)

Page 10: Twas the Lecture  Before Holiday Break

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

##

Page 11: Twas the Lecture  Before Holiday Break

Getting out of ftp

ftp> quit

221 Goodbye.

Page 12: Twas the Lecture  Before Holiday Break

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

Page 13: Twas the Lecture  Before Holiday Break

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

Page 14: Twas the Lecture  Before Holiday Break

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

Page 15: Twas the Lecture  Before Holiday Break

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

Page 16: Twas the Lecture  Before Holiday Break

Other Makefile examples

• Makefile_example.tgz• Fortran_stats.tgz

Page 17: Twas the Lecture  Before Holiday Break

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

Page 18: Twas the Lecture  Before Holiday Break

[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

Page 19: Twas the Lecture  Before Holiday Break

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

Page 20: Twas the Lecture  Before Holiday Break

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

Page 21: Twas the Lecture  Before Holiday Break

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

Page 22: Twas the Lecture  Before Holiday Break

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

Page 23: Twas the Lecture  Before Holiday Break

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

Page 24: Twas the Lecture  Before Holiday Break

Array Manipulation and I/O

Page 25: Twas the Lecture  Before Holiday Break

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

Page 26: Twas the Lecture  Before Holiday Break

Array Manipulation in IDL• image continued

6 7 8 9

10 11

12 13

14 15

16 17

Page 27: Twas the Lecture  Before Holiday Break

Array Manipulation in IDL

• image continued

18 19

20 21

22 23

Page 28: Twas the Lecture  Before Holiday Break

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

Page 29: Twas the Lecture  Before Holiday Break

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

Page 30: Twas the Lecture  Before Holiday Break

Array Manipulation in IDL

• Extracting the “color” or “spectral vector” of the first pixelIDL> print,image(0,0,*)

0

6

12

18

Page 31: Twas the Lecture  Before Holiday Break

Array Manipulation in IDL

• Assign band 1 to band 4IDL> band1=image(*,*,0)

IDL> image(*,*,3) = band1

• ShortcutIDL> image(*,*,3)=image(*,*,0)

Page 32: Twas the Lecture  Before Holiday Break

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

Page 33: Twas the Lecture  Before Holiday Break

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

Page 34: Twas the Lecture  Before Holiday Break

Reading & Writing Data Files in IDL

Page 35: Twas the Lecture  Before Holiday Break

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)

Page 36: Twas the Lecture  Before Holiday Break

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)

Page 37: Twas the Lecture  Before Holiday Break

sample_data_1.dat

0 1

2 3

4 5

6 7

8 9

10 11

Page 38: Twas the Lecture  Before Holiday Break

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

Page 39: Twas the Lecture  Before Holiday Break

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

Page 40: Twas the Lecture  Before Holiday Break

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

Page 41: Twas the Lecture  Before Holiday Break

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

Page 42: Twas the Lecture  Before Holiday Break

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

Page 43: Twas the Lecture  Before Holiday Break

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

Page 44: Twas the Lecture  Before Holiday Break

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

Page 45: Twas the Lecture  Before Holiday Break

test_output.dat

42 52 62

72 82 92

Page 46: Twas the Lecture  Before Holiday Break

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

Page 47: Twas the Lecture  Before Holiday Break

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

Page 48: Twas the Lecture  Before Holiday Break

test_P2_image.pgm

P2

3 2

255

42 52

62 72

82 92

Page 49: Twas the Lecture  Before Holiday Break

test_P5_image.pgm

P5

3 2

255

*4>HR\

Page 50: Twas the Lecture  Before Holiday Break

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

Page 51: Twas the Lecture  Before Holiday Break

Multiband Image Pixel Ordering

• Band Sequentialarray( column, row, band)array( sample, line, band)

• Band Interleaved by Linearray( column, band, row )array( sample, band, line)

• Band Interleaved by Pixelarray( band, column, row )array( band, sample, line )

Page 52: Twas the Lecture  Before Holiday Break

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.

Page 53: Twas the Lecture  Before Holiday Break

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

Page 54: Twas the Lecture  Before Holiday Break

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

Page 55: Twas the Lecture  Before Holiday Break

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

Page 56: Twas the Lecture  Before Holiday Break

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

Page 57: Twas the Lecture  Before Holiday Break

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

Page 58: Twas the Lecture  Before Holiday Break

Widget Programming

Page 59: Twas the Lecture  Before Holiday Break

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

Page 60: Twas the Lecture  Before Holiday Break

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

Page 61: Twas the Lecture  Before Holiday Break

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

Page 62: Twas the Lecture  Before Holiday Break

Result of the Widget_Base

• You should see a blank window similar to the one below

Page 63: Twas the Lecture  Before Holiday Break

Other Widget Types

• To invoke a Widget_ButtonIDL> button1 = Widget_Button( base )

IDL> Widget_Control, base, /realize

Page 64: Twas the Lecture  Before Holiday Break

To Change the Title of a Button Widget

IDL>Widget_Control,button1,Set_Value=“OK”

Page 65: Twas the Lecture  Before Holiday Break

Destroying a Widget

IDL> Widget_Control,button1,/destroy

Page 66: Twas the Lecture  Before Holiday Break

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.

Page 67: Twas the Lecture  Before Holiday Break

Other Widget Examples

IDL> base=widget_base(column=1)

IDL> button=widget_button(base)

IDL> label=widget_label(base)

IDL> widget_control,base,/realize

Page 68: Twas the Lecture  Before Holiday Break

Other Widget Examples

IDL> base1=widget_base(column=1)

IDL> list1=widget_list(base1)

IDL> slider1=widget_slider(base1)

IDL> widget_control, base1, /realize

Page 69: Twas the Lecture  Before Holiday Break

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

Page 70: Twas the Lecture  Before Holiday Break

Modifying Previous Example

IDL> widget_control,slider1,set_value=100

IDL> widget_control,base1,/realize

IDL> widget_control,button2,set_value=

"Last Button"

Page 71: Twas the Lecture  Before Holiday Break

Getting Information from a Widget

IDL>widget_control,button1,get_value=button_value

IDL>print,button_value

First Button

Page 72: Twas the Lecture  Before Holiday Break

Have a Safe and Happy Holiday

Remember, friends don’t let friends program drunk