Hallo,
Ich analysiere 6 Bilder mit JMP mit Skript, indem ich die Bilder in eine Datentabelle umwandle.
Ich habe alle Bildwerte in einer Datentabelle zusammengefasst.
Das Problem ist, dass ich die vorherige Bilddatentabelle mit Close( Data Table( Tables[i] ), No Save ); schließen kann.
Aber ich kann die 6 Bilder nicht schließen.
Ich habe etwas wie Close(img) oder Close("image") versucht, aber es lässt sich nicht schließen.
Irgendeine Idee, wie man die Bilder im Skript schließt?

NamesDefaultToHere(1);
// Read the image1:RED into JMP
img = NewImage("$Capillary Photo 2\RED.jpg");
w = newWindow("image", img);
// Get the pixel values as 3 distinct matrices (red, green and blue)
// RGB colors are in normalized color space (0.0-1.0)
{r, g, b} = img << getPixels("rgb");
// Convert rgb to gray-scale (intensity) matrix
i = 0.3*r + 0.59*g + 0.11*b;
// Get the pixel values as JSL colors then convert to hue, lightness and saturation
// HLS colors are in normalized color space (0.0-1.0)
jslColors = img << getPixels();
{h, l, s} = ColorToHLS(jslColors);
// Get the dimensions of the image/matrices
numRows = nrow(r);
numCols = ncol(r);
// Create a data table
dt1 = New Table("Image Data Red",
newColumn("X", set values(repeat(1::numCols, numRows))),
newColumn("Y", set values(shape(repeat(1::numRows,numCols)`,numCols,numRows))),
newColumn("r", set values(r)),
newColumn("g", set values(g)),
newColumn("b", set values(b)),
newColumn("i", set values(i)),
newColumn("h", set values(h)),
newColumn("l", set values(l)),
newColumn("s", set values(s)),
newColumn("CapillaryType", character, set each value("RED"))
);
img2 = NewImage("$\Capillary Photo 2\BLUE.jpg");
w2 = newWindow("image", img2);
//Some of other parts of script omitted (repetitive)
//Concatenation All Tables into 1
// Create your Tables list
Tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( Tables, Data Table( i ) << get name );
);
new Table("Image Data AllColour");
// Run the concatinations table
For( i = 1, i <= N Items( Tables ), i++,
Data Table( "Image Data AllColour" ) << Concatenate(
Data Table( Tables[i] ),
append to first table(1)
);
Close( Data Table( Tables[i] ), No Save );
);
Wait(0);
//the image objects still exist
//show(img);
//show(img2,3,4,5,6);
img = empty();
img2 = empty();
img3 = empty();
img4 = empty();
img5 = empty();
img6 = empty();
show(img, img2, img3, img4, img5, img6); //see LOG: img = Empty(); img2 = Empty();
delete symbols({img, img2, img3, img4, img5, img6});
show symbols();
Close(img);
Erweitern @txnelson Lösung:
Die gesuchte Meldung lautet << Fenster schließen und verweist auf Ihre Fensterreferenz. In Ihrem Code weisen Sie diese Referenzen w und w2 zu, sodass Sie << Fenster schließen an diese Objekte senden.
Names Default To Here( 1 );
// Read the image1:RED into JMP
img = New Image( "$Capillary Photo 2\RED.jpg" );
w = New Window( "image", img );
Wait( 5 );
w << close window;
Darüber hinaus ist es erwähnenswert, dass Sie die Bilder nicht in einem Fenster anzeigen müssen, um die Pixel zu erhalten.
Names Default To Here( 1 );
image = New Image( "$SAMPLE_IMAGES/windmap.png" );
{r, g, b} = image << getPixels("rgb");
show(r);
Ebenso könnten Sie die Anzeige der Zwischendatentabellen vermeiden, indem Sie diese erstellen Privatgelände :
dt1 = New Table("Image Data Red",
newColumn("X", set values(repeat(1::numCols, numRows))),
newColumn("Y", set values(shape(repeat(1::numRows,numCols)`,numCols,numRows))),
newColumn("r", set values(r)),
newColumn("g", set values(g)),
newColumn("b", set values(b)),
newColumn("i", set values(i)),
newColumn("h", set values(h)),
newColumn("l", set values(l)),
newColumn("s", set values(s)),
newColumn("CapillaryType", character, set each value("RED")),
Private // no display window is created; when dt1 is assigned something else the data table will be destroyed
);
So etwas sollte Ihnen das bringen, was Sie wollen, nämlich die Bildfenster zu schließen.
i = 1;
While( Window( i ) << get window title != "",
If( Left( Window( 1 ) << get window title, 5 ) == image,
Window( i ) << close window
);
i++;
);