top - download
⟦589bffd90⟧ Wang Wps File
Length: 13517 (0x34cd)
Types: Wang Wps File
Notes: tjg forel`sningsnoter
Names: »4600A «
Derivation
└─⟦ea7a1ecf3⟧ Bits:30006190 8" Wang WCS floppy, CR 0437A
└─ ⟦this⟧ »4600A «
WangText
FORM
MINIDATAMATSYSTEM
SIDE
###
TOMOGRAFISYSTEM
TJG
84/02/08
KURSUSOPL@G
S̲Y̲S̲T̲E̲M̲O̲P̲L̲@̲G̲:̲ ̲(̲T̲O̲M̲O̲G̲R̲A̲F̲I̲S̲K̲)̲ ̲B̲I̲L̲L̲E̲D̲B̲E̲H̲A̲N̲D̲L̲I̲N̲G̲S̲S̲Y̲S̲T̲E̲M̲.̲
…02…Det samlede projekt kan opfattes som et fors]g p> at
implementere et billedbehandlingssystem, specielt med
hen- blik p> behandling af tomografiske billeder, dvs.
digitali- serede billeder. Der skal tages hensyn til
at systemet skal v`re forberedt til behandling af 3-dimensionelle
data. Dette system t`nkes at best> af
…02…* en brugergr`nseflade, der integrerer systemets
samtlige funktioner til en konsistent helhed,
* forskellige delsystemer, der udf]rer, set
fra brugerens synspunkt, nyttige funktioner.
De delsystemer, som man p> naturlig m>de kan integrere
til et billedbehandlingssystem kan v`re
* billedog alfanumerisk database,
* grafiske funktioner,
* aritmetiske/statistiske funktioner, der
opererer p> billeder og tal.
I et "rigtigt" tomografisk system ville der ogs> v`re
en gruppe tomografiske funktioner. Denne gruppe af
funktioner kan vi dog af naturlige grunde udelade.
De delsystemer, som forventes implemeneteret beskrives
mere detaljeret i f]lgende afsnit.
For at skaffe et f`lles udgangspunkt beskrives der
i det n`ste afsnit "et ideopl`g", en ganske uformel
beskrivelse af hvad der sker en mandag morgen, n>r
en tilf`ldig "bruger" kommer forbi et "laboratorium",
hvor det f`rdige system er opstillet. Det er alts>
mandag morgen, den 1 april >r 1986.
I̲d̲e̲o̲p̲l̲`̲g̲.̲
…02…Brugeren Y ankommer til sit laboratorium, hvor hans
nye billedbehandlingssystem "INTERIM" er opstillet.
Y t`nder for systemet og n>r "Use me, I…08…m ready" st>r
p> terminalen g>r han i gang med sit arbejde. Sidste
uge har Y foretaget en hel r`kke unders]gelser, der
har resulteret i over 200 billeder, en del alfanumeriske
data og en m`ngde tal. Y er nemlig en l`ge, der foretager
patient- unders]gelser.
(Bem`rkning: Y kunne ogs> v`re en ingeni]r, eller en
geolog der arbejder med satellitbilleder)
Y er ikke ene om at bruge "INTERIM". Hans kollega X
bruger ogs> maskinen. Det f]rste Y g]r er at >bne sin
egen database
open ̲database(Y ̲data, my ̲private ̲key)
og udskrive en liste over sidste uges unders]gelser
list ̲pt
Men han har glemt parametre! "INTERIM" sp]rger da ham
start ̲date=860324
last ̲date=860331
En patientliste kommer til syne p> terminalen. Det
vil nu v`re rart at f> denne liste p> et stykke papir.
Y skriver derfor
list ̲pt(860324, 860331) -- printer
"list ̲pt" er en funktion som Y selv har lavet ud fra
nogen mere simple funktioner. For at opbygge "list
̲pt" har Y brugt en simpel linieorienteret editor. Teksten
er dern`st blevet oversat af en makrofunktiongenerator
til en slags pseudokode. Under overs`ttelsesprocessen
har makro- generatoren bedt Y om at indtaste parameternavne,
der skrives ud n>r man har glemt at definere en >ben
parameter. Makrogeneratoren har ogs> bedt (tvunget
er m>ske et bedre udtryk) Y til at definere en kort
beskrivelse af "list ̲pt" som man f>r udskrevet n>r
man aktiverer "help" funktionen ved
help(list ̲pt, short).
Skriver man "long" i stedet for "short" f>r man ogs>
be- skrivelser af parametre med. Y har ogs> defineret
para- meterbeskrivelser n>r han k]rte makrogeneratoren.
Makro- generatoren arbejder med 3 slags funktionsparametre
* >̲b̲n̲e̲ ̲p̲a̲r̲a̲m̲e̲t̲r̲e̲, der ikke er tillagt nogen
v`rdi
- brugeren skal angive en v`rdi n>r han
aktiverer funktionen,
* p̲r̲`̲d̲e̲f̲i̲n̲e̲r̲e̲d̲e̲ ̲p̲a̲r̲a̲m̲e̲t̲r̲e̲, der har en "default"
v`rdi, men hvis brugeren indtaster
parameterv`rdien s> omdefinerer han
midlertidigt parameterv`rdien,
* l̲u̲k̲k̲e̲d̲e̲ ̲p̲a̲r̲a̲m̲e̲t̲r̲e̲, der en gang for alle
har
f>et tillagt en v`rdi.
Standardfunktionerne kan kun have >bne og pr`definerede
parametre. Makrofunktionerne kan ogs> have lukkede
para- metre. Y kan p> ethvert tidspunkt k]re makrogeneratoren
p> en tidligere defineret makrofunktion for at `ndre
p> para- metertyper (f.eks. >ben til pr`defineret),
funktions og parameterbeskrivelser.
Lad os vende tilbage til Y. Hans kald af "list ̲pt"
har resulteret i udskriften af flg. tabel:
-----------------------------------------------
! pt
!
!---------------------------------------------!
! navn ! dato ! s ̲1 ! s ̲2 ! s ̲3
!
!---------------------------------------------!
1! Hansen !860322 ! * ! * ! *
!
2! Andersen !860327 ! * ! * ! *
!
3! K. Jensen !860327 ! * ! * ! *
!
...
Tegnet "*" indikerer at s]jlen (attributten) s ̲1 ikke
er en simpel type, som tilf`ldet er i almindelige relations-
databaser, men en 1, 2 eller 3 dimensionel array..
Y kan f> at vide hvordan s ̲1 er opbygget ved at kalde
type(pt.s ̲1)
Svaret kan se s>ledes ud
relation = pt
attribute= s ̲1 is array (1..64, 1..64) of real.
Y har nu t`nkt sig at arbejde med data h]rende til
anden r`kke i tabellen. Han kan udpege data i billedet
s ̲2 p> forskellige m>der:
* pt(2).s ̲2 udpeger hele billedet,
* pt(2).s ̲2(7,9) udpeger et enkelt billedelement,
* pt(2).s ̲2(7..10, 8..30) udpeger et delbillede,
* pt(2).s ̲2($,20..40) udpeger ogs> et delbillede.
Tegnet $ er e̲t̲ ̲"̲d̲e̲f̲a̲u̲l̲t̲"̲ ̲t̲e̲g̲n̲, der indikerer, at man
]nsker at bruge en pr`defineret v`rdi. Tegnet kan bruges
i stedet for en parameterv`rdi. Y har t`nkt sig at
arbejde et stykke tid med data h]rende til anden r`kke
i tabellen. For at slippe for at skrive pt(2) foran
hver datareference kalder Y funktionen "use"
use(pt(2)).
Fra nu af refererer Y til data i pt(2) indtil han kalder
funktionen deuse, eller indtil han kalder "use" med
en anden parameter. Begreber "pt(first)", "pt(last)"
"pt(next)" og count(pt) har ogs> en veldefineret mening.
Foruden et databegreb benytter Y sig af systemets f̲u̲n̲k̲t̲i̲o̲n̲s̲b̲e̲g̲r̲e̲b̲.
Det er ikke altid, at han er klar over, at han egentlig
aktiverer funktioner. Det er kun mere komplicerede
funktioner der kendes ved navn. Det fundamentale funktioner
er i̲m̲p̲l̲i̲c̲i̲t̲e̲ ̲f̲u̲n̲k̲t̲i̲o̲n̲e̲r̲, der er fuldst`ndigt integreret
med gr`nsefladen. Den vigtigste implicite funktion
er "̲f̲l̲y̲t̲ ̲d̲a̲t̲a̲"̲ funktion, der aktiveres af tegnet "st]rre
end" (af typografiske grunde skriver jeg det tegn som
dobbelt minus --). For at skrive indholdet af en datapost
ud p> terminalen beh]ver Y end ikke at angive funktionen.
Han kan n]jes med at skrive
s ̲2(10..15, 7..50)
med det resultat, at en formatteret udskrift af tabellen
bliver skrevet ud p> terminalen. Alternativt kunne
Y have skrevet
s ̲2(10..15, 7..50) -- terminal.
Nedenfor er der angivet flere eksempler p> "flyt data"
funktion:
* s ̲2 -- tv.colour(7,30) viser billedet p>
den grafiske terminal
* min(s ̲2) -- matrix(7,8) minimumsv`rdien
af billedet gemmes i elementet (7,8) i
en todimensional tabel
* s ̲2 -- s ̲3 fuldst`ndig kopiering
* s ̲2+s ̲3 -- s ̲4 billedaddition og kopiering
* s ̲2(7..14, 9..50) -- temp(5..12, 20..61)
flytning af en del af et billede over i
et del- billede
* 99 -- v40 initialisering af en vektor
* "K. Andersen" -- pt(2).navn initialisering
af data i databasen.
Almindelige aritmetiske funktioner og g`ngse database-
funktioner er integreret i gr`nsefladen. Eksempler
er an- givet nedenunder:
* count(pt)
* min(pt.dato), max(s ̲2)
* avg(s ̲2), avg(0, 10,14, 16, 17)
* any(pt)
* pt(2).s ̲2(10..15, 20..30)*2.3 -- temp(10..15,
40..50)
* pt(2).s ̲2(10..15,20..30)*4.5 -- printer
* min(s ̲2)+7.5*(34+max(s ̲3)) -- terminal
Det ses at kombinationen af "flyt data" funktionen
og almindelige aritmetiske regneudtryk giver muligheder
for at udf]re komplicerede operationer.
Y kender ogs> en anden slags funktioner, nemlig e̲k̲s̲p̲l̲i̲c̲i̲t̲
n̲a̲v̲n̲g̲i̲v̲n̲e̲ funktioner. S>danne funktioner udf]rer typisk
komplicerede transformationer af data. Til denne gruppe
funktioner h]rer ogs> Y…08…s egne makrofunktioner. Funktionerne
i denne gruppe aktiveres p> flere forskellige m>der:
* funktion parameterl]s funktionskald,
der ikke
resulterer i nogen uddata,
* funktion -- out ̲data parameterl]s
funktionskald der resulterer i uddata,
* funktion(in ̲data) -- out ̲data
* funktion(in ̲data1, in ̲data2,... out ̲data1,...).
Foruden databegreb og funktionsbegreb kender Y ogs>
y̲d̲r̲e̲ e̲n̲h̲e̲d̲e̲r̲. For at brugergr`nsefladen skal v`re simpel
og konsistent kan man t`nke sig at f.eks. en linieskriver
og en terminal opfattes som ustrukturerede datavariable
(af typen text ̲file?) som man kun kan sende data til.
Det er lidt mere kompliceret at opstille en model for
en grafisk terminal, men det er ikke umuligt.
D̲e̲ ̲g̲r̲a̲f̲i̲s̲k̲e̲ ̲f̲u̲n̲k̲t̲i̲o̲n̲e̲r̲ som Y kan kalde producerer data
af en speciel type, lad os kalde typen "image". S>danne
data kan flyttes med den s`dvanlige "flyt data" funktion
ud p> den grafiske terminal. Y kan vise en linie p>
2 forskellige m>der:
* line(from ̲x, from ̲y, to ̲x, to ̲y, colour,
style)
-- temp hvor temp er "image" variabel,
frem- visning af linien sker ved
temp -- tv.colour
* line(from ̲x,from ̲y, to ̲x, to ̲y, colour,
style)
-- tv.colour.
De basale grafiske funktioner som Y benytter sig af
i sit daglige arbejde er
* function(y ̲values,from ̲x, x ̲inc, x ̲origo,
y ̲
origo, x ̲scale, y ̲scale)
* curve(x ̲values, y ̲values,...)
* line(...)
* rectangel(x1,y1,x2,y2,colour)
* axis(...)
(Skal der v`re eksplicite funktioner der viser tekst
og to- dimensionalle tabeller som farvekort ?).
Y er is`r glad for systemets i̲n̲t̲e̲r̲a̲k̲t̲i̲v̲e̲ ̲g̲r̲a̲f̲i̲s̲k̲e̲ ̲e̲d̲i̲t̲o̲r̲,
der ved hj`lp af sp]rgsm>l/svar dialog opbygger en
en ny "image" variabel, der kan vises p> den grafiske
terminal. Den grafiske editor opbygger efterh>nden
billedet p> sk`rmen og retter man noget i "image" datastrukturen
s> f>r man rettelsen ]jeblikkeligt at se p> den grafiske
terminal. De enkelte elementer i en "image" datastruktur
kan igen v`re tidligere definerede "image" datastrukturer
- s>ledes kan man opbygge komplekse billeder ud fra
tidligere de- finerede simplere billeder.
D̲e̲l̲s̲y̲s̲t̲e̲m̲ ̲1̲ ̲:̲ ̲b̲r̲u̲g̲e̲r̲g̲r̲`̲n̲s̲e̲f̲l̲a̲d̲e̲.̲
…02…Dette delsystem har en central rolle i forhold til
de andre delsystemer. Systemets funktioner fastl`gges
af gr`nsefladen - derfor kan hverken det grafiske delprojekt
eller databasedelen rigtigt komme i gang f]r gr`nsefladen
er fastlagt. En liste over delprojekter og problemer
der skal tages stilling til:
definition af brugerens begrebsverden:
…02…hvad er data og datatype ?
hvordan sammensmelter man database med almindelige
"variable" ?
skal man have permanente og tempor`re variable
?
hvordan kalder man funktioner ?
procedurekald: f(x, y) ?
ligesom i FORTH: x y f ?
hvordan skal brugeren opfatte ydre enheder ?
hvordan skal brugeren opfatte den grafiske terminal
s>ledes at man undg>r at indf]re et nyt og kompliceret
begreb ?
hvor g>r gr`nsefladen mellem brugergr`nsefladen og
de andre delsystemer:
hvilke dele af "flyt data" funktionen er med
i brugergr`nsefladen ?
aritmetiske udtryk er givet med i brugergr`nsefladen
!
syntax og semantik for kommandosproget:
skal der ogs> v`re menuer ?
format for makrofunktion, intern repr`sentation af
funktionsbeskrivelser, indl`ggelse og sletning af basis-
funktioner
makroeditor, makrogenerator
hvordan repr`senterer man det "milj]" som brugeren
k]rer i ?
"name resolution" - hvordan finder man ud hvad "s ̲2"
betyder ?
parameteroverf]rsel til andre delsystemer
D̲e̲l̲s̲y̲s̲t̲e̲m̲ ̲2̲ ̲:̲ ̲d̲a̲t̲a̲b̲a̲s̲e̲.̲
…02…Navnet "database" er tildels misvisende idet "open
̲database" bringer Y ind i et "milj]", der indeholder
database
variable
typer
og muligvis nogle f> andre datastrukturer, f.eks.
text ̲filer
image ̲filer.
Det er en kunst at f> en database og de andre data-
strukturer til at fremtr`de som en helhed. En liste
over delprojekter og problemer, der skal tages stilling
til:
interne datastrukturer !!!
databasefunktioner
skal man opfinde en "relation" type for at definere
relationer ? Noget i stil med
type pt ̲type = relation
navn : s20;
dato : integer;
s ̲1 : array (1..64, 1..64)
of real;
...
end;
hvordan indf]rer brugeren nye typer, variable, relationer
?
vi har ingen "compiler" - t`nk p> dialog formen
!
filstrukturer
overf]rsel af parametre
overf]rsel af data til/fra databasedelen
(Fotokopier af overheads fra databaseforel`sning er
vedlagt)
D̲e̲l̲s̲y̲s̲t̲e̲m̲ ̲3̲ ̲:̲ ̲g̲r̲a̲f̲i̲k̲.̲
…02…Dette delprojekt g>r is`r ud p> at udvikle nogle f>
begreber, der g]r det nemt for brugeren at arbejde
med den grafiske terminal:
den grafiske terminal som en speciel datastruktur
opbygning af billeder, billedfiler, datastrukturer.
Opgaven g>r dog is`r ud p> at opbygge brugerfunktioner
(som f.eks. "line"), diskutere hvad der skal med og
hvad der ikke skal med. Den interaktive grafiske editor
er dette delprojekts flagskib.
En liste over delprojekter og problemer:
brugerens opfattelse af den grafiske sk`rm - koordinater,
adressering
grafiske funktioner
den grafiske editor
"image" datastruktur.
parameteroverf]rsel