DMUG-Archiv 2000

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Externe Graphik

Hallo,

Mathematica ist als Datenschnittstelle durch OpenRead, OpenReadBinary
und die entsprechenden Schreibkommandos nebst den leistungsstarken
Argumenten sehr maechtig. Man kann fast alles Lesen, in fast alles
konvertieren und wieder gesteuert rausschreiben. Zum Lesen muss man
natuerlich wissen, was man eigentlich liest. Konkret kann man Bilder so
ohne weiteres nur auslesen, wenn sie in unkomprimierter Form vorliegen,
also z.B. TIFF oder man kennt den Algorithmus mit dem entkomprimiert
wird. Dann koennte man auch diese lesen. Hat man genug Geld, kann man
sich natuerlich immer auch entsprechende Tools kaufen, die das
entsprechende leisten und spart Programmierarbeit. Als
Mathematica-Nutzer programmiert man natuerlich lieber alles selbst und
wenn es das Leben kostet. Als einfachen Vorschlag, ein TIFF-File zu
lesen und zu manipulieren seien die folgenden Zeilen angeheftet:
Erzeugen des Bildes :
g=Plot3D[{z=Sin[Sqrt[x^2+y^2]],RGBColor[z,0,0]},{x,-2,2},{y,-2,2},
Boxed->False,Axes->False,Mesh->False,PlotPoints->{50,50}]
Display["plot.tif", g, "TIFF", ImageSize -> {150, 100}]
FileInformation["plot.tif"]
Hieraus erkennt man, dass im TIFF der Vorspann 230 Byte lang ist.
Einlesen :
test=OpenRead["plot.tif"]
Da nur "ROT" beschrieben wurde, reicht es, nur jedes dritte Byte zu
lesen :
liesJedesDritte=First[Read[#,{Byte,Byte,Byte}]]&
SetStreamPosition[test,230]
bild=Table[RGBColor[(liesDritte[test])/255.,0,0],{100},
{150}];
Graphics[RasterArray[Reverse[bild]]]//Show
erzeugt das Bild im NB.(Kleiner Fehler:Im Rand -
RGBColor[1,0,0]->RGBColor[1,1,1]
Das Byte-weise auslesen dauert zwar, aber man kann jetzt alles
manipulieren, beispielsweise Farben in einem bestimmten Bereich durch
Falschfarben ersetzen, Transformationen auf Zeilen oder Spalten anwenden
usw.

Exportieren von Daten :

8 Jahre lang arbeitet das folgende Paket bestens (Nancy Blachmann):

BeginPackage["listeRaus`"]; 
listeRaus::usage="listeRaus[filename,daten] schreibt eine
zweidimensionale\n Matrix in ein File mit Namen filename und entfernt
dabei die geschweiften\n Klammern."
Begin["listeRaus`Private`"];

listeRaus[filename_String,data_List] :=
   Module[{
           file = OpenWrite[filename]
         },
         Map[
              (
                WriteString[file, First[#]];
                Map[
                      WriteString[file,"\t",#]&,
                      Rest[#]
                     ];
                WriteString[file,"\n"]
              )&,
              data
             ];
             Close[file]
         ];
End[];
EndPackage[];
(*Die  aeussere Funktion trennt die Matrix in f[zeile] auf.f besteht
zunaechst aus dem Schreibbefehl "schreibe erstes Element". Dann kommt
die
innere Funktion g, die aus "Schreiben eines Tabulators" und "Schreiben"
ange-
wandt auf den Rest der Zeile, also zweites bis letztes Element der Zeile
besteht. Nach dem Schreiben der Zeile wird noch ein "Neue-Zeile"
geschrieben*)

Hat man sehr kleine oder sehr grosse Zahlen zu schreiben, wandele ich
durch FortranForm um.
Will man die Zahlen verkuerzen hilft nach immer z.B. drei Zahlen nach
dem Komma :
Floor[12.123456*10^#]/10.^#&[3]

Gruss
Hajo Spitzer  (HU)





Jens-Peer Kuska wrote:
> 
> Hallo,
> 
> wie w"ars mit
> 
> gr /. Graphics[Raster[m_,___]] :> m
> 
> Man beachte aber, dass Raster[] in Version 4. einige undokumetierte
> Argumente hat. In Version 4 steht n"amlich noch die Dimension als
> zweites und die Bittiefe (als {0,255}) als drittes Argument mit drin.
> Dann kommen erst die Optionen f"ur die Farbe, ...
> 
> Gruss
>   Jens
> 
> > Voraussetzung ist Mathematica 4.0!
> > Dann:
> > gr=Import["bild.tif"]
> > Show[gr]
> >
> > Ich habe auch gleich eine Frage:
> >
> > ??gr
> >  ergibt:
> > gr="Graphics"[ Raster[{{{238,238,238},{181,181,181},
> >
> > Wie komme ich an die Raster-Daten heran?
> >
> > Cheers,
> >     Manfred


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html