twas the lecture before holiday break

72
Rolando V. Raqueño Wednesday, June 15, 2022 1 1 Twas the Lecture Before Holiday Break Readings Present Makefiles Image Array Manipulation and I/O Simple Widget Programs

Upload: marlie

Post on 07-Jan-2016

34 views

Category:

Documents


1 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

Rolando V. Raqueño Thursday, April 20, 202311

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

Rolando V. Raqueño Thursday, April 20, 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

Page 3: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 4: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 5: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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:

Page 6: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 202366

Most important ftp command

ftp> ?

Page 7: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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)

Page 8: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 202388

ftp file transfer type

ftp> ascii

200 Type okay.

ftp> binary

200 Type okay.

Page 9: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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)

Page 10: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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).

##

Page 11: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20231111

Getting out of ftp

ftp> quit

221 Goodbye.

Page 12: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 13: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 14: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 15: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 16: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20231616

Other Makefile examples

• Makefile_example.tgz• Fortran_stats.tgz

Page 17: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 18: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 19: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 20: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 21: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 22: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 23: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 24: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20232424

Array Manipulation and I/O

Page 25: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 26: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20232626

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

Rolando V. Raqueño Thursday, April 20, 20232727

Array Manipulation in IDL

• image continued

18 19

20 21

22 23

Page 28: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 29: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 30: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20233030

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

Rolando V. Raqueño Thursday, April 20, 20233131

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

Rolando V. Raqueño Thursday, April 20, 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

Page 33: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 34: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20233434

Reading & Writing Data Files in IDL

Page 35: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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)

Page 36: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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)

Page 37: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20233737

sample_data_1.dat

0 1

2 3

4 5

6 7

8 9

10 11

Page 38: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 39: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 40: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 41: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 42: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 43: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 44: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 45: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20234545

test_output.dat

42 52 62

72 82 92

Page 46: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 47: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 48: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20234848

test_P2_image.pgm

P2

3 2

255

42 52

62 72

82 92

Page 49: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20234949

test_P5_image.pgm

P5

3 2

255

*4>HR\

Page 50: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 51: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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 )

Page 52: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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.

Page 53: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 54: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 55: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 56: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 57: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 58: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20235858

Widget Programming

Page 59: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 60: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 61: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 62: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20236262

Result of the Widget_Base

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

Page 63: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20236363

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

Rolando V. Raqueño Thursday, April 20, 20236464

To Change the Title of a Button Widget

IDL>Widget_Control,button1,Set_Value=“OK”

Page 65: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20236565

Destroying a Widget

IDL> Widget_Control,button1,/destroy

Page 66: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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.

Page 67: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 68: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 69: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 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

Page 70: Twas the Lecture  Before Holiday Break

Rolando V. Raqueño Thursday, April 20, 20237070

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

Rolando V. Raqueño Thursday, April 20, 20237171

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

Rolando V. Raqueño Thursday, April 20, 20237272

Have a Safe and Happy Holiday

Remember, friends don’t let friends program drunk