Skip to content

Commit 1f4fb0e

Browse files
committed
Merge branch 'master' into fix-downsampled-resolutions
2 parents 53be075 + d02c8d6 commit 1f4fb0e

4 files changed

Lines changed: 136 additions & 82 deletions

File tree

pom.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<groupId>net.preibisch</groupId>
1313
<artifactId>multiview-reconstruction</artifactId>
14-
<version>8.1.2-SNAPSHOT</version>
14+
<version>8.1.3-SNAPSHOT</version>
1515

1616
<name>Multiview Reconstruction</name>
1717
<description>Software for the reconstruction of multi-view microscopic acquisitions
@@ -106,6 +106,8 @@ like Selective Plane Illumination Microscopy (SPIM) Data.</description>
106106
<ijp-kheops.version>0.6.2</ijp-kheops.version>
107107
<generic-archiver.version>1.1.0</generic-archiver.version>
108108

109+
<mpicbg.version>1.6.6</mpicbg.version>
110+
109111
<!-- TEMP: Until pom-scijava 44.0.0 is released. -->
110112
<imglib2.version>8.0.0</imglib2.version>
111113
<imglib2-cache.version>1.0.0-beta-20</imglib2-cache.version>

src/main/java/net/preibisch/mvrecon/fiji/plugin/Display_View.java

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -31,31 +31,20 @@
3131
import mpicbg.spim.data.sequence.Angle;
3232
import mpicbg.spim.data.sequence.Channel;
3333
import mpicbg.spim.data.sequence.Illumination;
34-
import mpicbg.spim.data.sequence.ImgLoader;
3534
import mpicbg.spim.data.sequence.Tile;
3635
import mpicbg.spim.data.sequence.TimePoint;
3736
import mpicbg.spim.data.sequence.ViewDescription;
3837
import mpicbg.spim.data.sequence.ViewId;
3938
import net.imglib2.RandomAccessibleInterval;
40-
import net.imglib2.img.ImgFactory;
41-
import net.imglib2.img.imageplus.ImagePlusImgFactory;
42-
import net.imglib2.type.NativeType;
43-
import net.imglib2.type.numeric.integer.UnsignedShortType;
44-
import net.imglib2.type.numeric.real.FloatType;
4539
import net.preibisch.legacy.io.IOFunctions;
4640
import net.preibisch.mvrecon.fiji.plugin.queryXML.LoadParseQueryXML;
4741
import net.preibisch.mvrecon.fiji.spimdata.SpimData2;
48-
import net.preibisch.mvrecon.fiji.spimdata.imgloaders.AbstractImgFactoryImgLoader;
4942
import net.preibisch.mvrecon.process.export.DisplayImage;
5043
import net.preibisch.mvrecon.process.fusion.FusionTools;
5144
import net.preibisch.mvrecon.process.interestpointregistration.pairwise.constellation.grouping.Group;
5245

5346
public class Display_View implements PlugIn
5447
{
55-
public static String[] pixelTypes = new String[]{ "32-bit floating point", "16-bit unsigned integer" };
56-
public static int defaultPixelType = 0;
57-
protected int pixelType = 0;
58-
5948
public static String[] imgTypes = new String[]{ "ArrayImg", "PlanarImg (large images, easy to display)", "CellImg (large images)" };
6049
public static int defaultImgType = 1;
6150
protected int imgtype = 1;
@@ -107,8 +96,6 @@ public void run(String arg0)
10796
gd.addChoice( "Illumination", illuminationNames, illuminationNames[ defaultIlluminationChoice ] );
10897
gd.addChoice( "Tile", tileNames, tileNames[ defaultTileChoice ] );
10998
gd.addChoice( "Timepoint", timepointNames, timepointNames[ defaultTimepointChoice ] );
110-
gd.addMessage( "" );
111-
gd.addChoice( "Pixel_type", pixelTypes, pixelTypes[ defaultPixelType ] );
11299

113100
gd.showDialog();
114101

@@ -120,7 +107,6 @@ public void run(String arg0)
120107
final Illumination illumination = illuminations.get( defaultIlluminationChoice = gd.getNextChoiceIndex() );
121108
final Tile tile = tiles.get( defaultTileChoice = gd.getNextChoiceIndex() );
122109
final TimePoint tp = timepoints.get( defaultTimepointChoice = gd.getNextChoiceIndex() );
123-
final int pixelType = defaultPixelType = gd.getNextChoiceIndex();
124110

125111
// get the corresponding viewid
126112
final ViewId viewId = SpimData2.getViewId( result.getData().getSequenceDescription(), tp, channel, angle, illumination, tile );
@@ -146,44 +132,13 @@ public void run(String arg0)
146132
}
147133

148134
// display it
149-
display( result.getData(), viewId, pixelType, name );
135+
display( result.getData(), viewId, name );
150136
}
151137

152-
public static void display( final AbstractSpimData< ? > spimData, final ViewId viewId, final int pixelType, final String name )
138+
private static void display( final AbstractSpimData< ? > spimData, final ViewId viewId, final String name )
153139
{
154-
final ImgLoader imgLoader = (ImgLoader)spimData.getSequenceDescription().getImgLoader();
155-
final ImgFactory< ? extends NativeType< ? > > factory;
156-
final AbstractImgFactoryImgLoader il;
157-
158-
// load as ImagePlus directly if possible
159-
if ( AbstractImgFactoryImgLoader.class.isInstance( imgLoader ) )
160-
{
161-
il = (AbstractImgFactoryImgLoader)imgLoader;
162-
factory = il.getImgFactory();
163-
il.setImgFactory( new ImagePlusImgFactory< FloatType >( new FloatType()));
164-
}
165-
else
166-
{
167-
il = null;
168-
factory = null;
169-
}
170-
171-
// display it
172-
173-
if ( pixelType == 0 )
174-
{
175-
FusionTools.getImagePlusInstance(((ImgLoader)spimData.getSequenceDescription().getImgLoader()).getSetupImgLoader( viewId.getViewSetupId() ).getFloatImage( viewId.getTimePointId(), false ), true, name, 0, 255, DisplayImage.service ).show();
176-
}
177-
else
178-
{
179-
@SuppressWarnings( "unchecked" )
180-
RandomAccessibleInterval< UnsignedShortType > img =
181-
( RandomAccessibleInterval< UnsignedShortType > ) ((ImgLoader)spimData.getSequenceDescription().getImgLoader()).getSetupImgLoader( viewId.getViewSetupId() ).getImage( viewId.getTimePointId() );
182-
FusionTools.getImagePlusInstance(img, true, name, 0, 255, DisplayImage.service ).show();
183-
}
184-
185-
if ( factory != null && il != null )
186-
il.setImgFactory( factory );
140+
RandomAccessibleInterval image = spimData.getSequenceDescription().getImgLoader().getSetupImgLoader( viewId.getViewSetupId() ).getImage( viewId.getTimePointId() );
141+
FusionTools.getImagePlusInstance( image, true, name, 0, 255, DisplayImage.service ).show();
187142
}
188143

189144
public static void main( String[] args )

src/main/java/net/preibisch/mvrecon/fiji/spimdata/explorer/ViewSetupExplorerPanel.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,7 @@ public Component getTableCellRendererComponent(
686686
}
687687
}
688688

689+
@Override
689690
public ArrayList< ExplorerWindowSetable > initPopups()
690691
{
691692
final ArrayList< ExplorerWindowSetable > popups = new ArrayList< ExplorerWindowSetable >();

src/main/java/net/preibisch/mvrecon/fiji/spimdata/explorer/popup/DisplayRawImagesPopup.java

Lines changed: 128 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,31 @@
2222
*/
2323
package net.preibisch.mvrecon.fiji.spimdata.explorer.popup;
2424

25+
import java.awt.Color;
2526
import java.awt.event.ActionEvent;
2627
import java.awt.event.ActionListener;
2728
import java.util.ArrayList;
29+
import java.util.Arrays;
30+
import java.util.HashMap;
2831

2932
import javax.swing.JMenu;
3033
import javax.swing.JMenuItem;
31-
import javax.swing.JOptionPane;
34+
import javax.swing.event.MenuEvent;
35+
import javax.swing.event.MenuListener;
3236

37+
import mpicbg.spim.data.sequence.ImgLoader;
38+
import mpicbg.spim.data.sequence.MultiResolutionImgLoader;
39+
import mpicbg.spim.data.sequence.MultiResolutionSetupImgLoader;
40+
import mpicbg.spim.data.sequence.ViewId;
41+
import net.imglib2.RandomAccessibleInterval;
3342
import net.preibisch.legacy.io.IOFunctions;
34-
import net.preibisch.mvrecon.fiji.plugin.Display_View;
3543
import net.preibisch.mvrecon.fiji.spimdata.SpimData2;
3644
import net.preibisch.mvrecon.fiji.spimdata.explorer.ExplorerWindow;
37-
38-
import mpicbg.spim.data.sequence.ViewId;
45+
import net.preibisch.mvrecon.process.export.DisplayImage;
46+
import net.preibisch.mvrecon.process.fusion.FusionTools;
3947

4048
public class DisplayRawImagesPopup extends JMenu implements ExplorerWindowSetable
4149
{
42-
public static final int askWhenMoreThan = 5;
4350
private static final long serialVersionUID = 5234649262342301390L;
4451

4552
ExplorerWindow< ? > panel = null;
@@ -48,14 +55,104 @@ public DisplayRawImagesPopup()
4855
{
4956
super( "Display Raw Image(s)" );
5057

51-
final JMenuItem as32bit = new JMenuItem( "As 32-Bit ImageJ Stack" );
52-
final JMenuItem as16bit = new JMenuItem( "As 16-Bit ImageJ Stack" );
58+
final JMenuItem asFullStack = new JMenuItem( "Full-resolution as ImageJ Stack" );
59+
asFullStack.addActionListener( new MyActionListener( 0 ) );
60+
this.add( asFullStack );
5361

54-
as16bit.addActionListener( new MyActionListener( true ) );
55-
as32bit.addActionListener( new MyActionListener( false ) );
62+
final JMenu asStack = new JMenu( "As ImageJ Stack at level" );
63+
64+
asStack.addMenuListener( new MenuListener()
65+
{
66+
@Override
67+
public void menuSelected( MenuEvent e )
68+
{
69+
asStack.removeAll();
5670

57-
this.add( as16bit );
58-
this.add( as32bit );
71+
final SpimData2 spimData = (SpimData2)panel.getSpimData();
72+
73+
final ArrayList< ViewId > views = new ArrayList<>();
74+
views.addAll( ApplyTransformationPopup.getSelectedViews( panel ) );
75+
76+
// filter not present ViewIds
77+
SpimData2.filterMissingViews( spimData, views );
78+
79+
if ( views.size() == 0 )
80+
{
81+
JMenuItem item = new JMenuItem( "No views selected." );
82+
item.setForeground( Color.GRAY );
83+
asStack.add( item );
84+
return;
85+
}
86+
87+
if ( MultiResolutionImgLoader.class.isInstance( spimData.getSequenceDescription().getImgLoader() ))
88+
{
89+
final MultiResolutionImgLoader mrLoader = (MultiResolutionImgLoader)spimData.getSequenceDescription().getImgLoader();
90+
91+
HashMap< Integer, long[] > levelToSize = null;
92+
93+
boolean consistent = true;
94+
boolean consistentSizes = true;
95+
96+
for ( final ViewId v : views )
97+
{
98+
if ( !consistent )
99+
break;
100+
101+
final MultiResolutionSetupImgLoader<?> il = mrLoader.getSetupImgLoader( v.getViewSetupId() );
102+
final int levels = il.getMipmapTransforms().length;
103+
104+
if ( levelToSize == null )
105+
{
106+
levelToSize = new HashMap<>();
107+
108+
for ( int level = 0; level < levels; ++level )
109+
levelToSize.put( level, il.getImageSize( v.getTimePointId(), level ).dimensionsAsLongArray() );
110+
}
111+
else
112+
{
113+
if ( levels != levelToSize.size() )
114+
consistent = false;
115+
else
116+
for ( int level = 0; level < levels; ++level )
117+
if ( !Arrays.equals( levelToSize.get( level ), il.getImageSize( v.getTimePointId(), level ).dimensionsAsLongArray() ) )
118+
consistentSizes = false;
119+
}
120+
}
121+
122+
if ( levelToSize != null && consistent )
123+
{
124+
for ( int level = 0; level < levelToSize.size(); ++level )
125+
{
126+
JMenuItem item = new JMenuItem( "Level " + level + (consistentSizes ? " " + Arrays.toString( levelToSize.get( level ) ) : " [image sizes vary]" ) );
127+
item.addActionListener( new MyActionListener( level ) );
128+
asStack.add( item );
129+
}
130+
}
131+
else
132+
{
133+
JMenuItem item = new JMenuItem( "MultiResolution levels vary across selected views" );
134+
item.setForeground( Color.GRAY );
135+
asStack.add( item );
136+
}
137+
//JMenuItem item = new JMenuItem( labels[ i ] );
138+
//item.addActionListener( new HistogramListener( spimData, views, InterestPointTools.getSelectedLabel( labels, i ), i ) );
139+
//asStack.add( item );
140+
}
141+
else
142+
{
143+
JMenuItem item = new JMenuItem( "No MultiResolutionImgLoader" );
144+
item.setForeground( Color.GRAY );
145+
asStack.add( item );
146+
}
147+
}
148+
149+
@Override
150+
public void menuDeselected( MenuEvent e ) {}
151+
152+
@Override
153+
public void menuCanceled( MenuEvent e ) {}
154+
} );
155+
this.add( asStack );
59156
}
60157

61158
@Override
@@ -68,11 +165,10 @@ public JMenuItem setExplorerWindow( final ExplorerWindow< ? > panel )
68165

69166
public class MyActionListener implements ActionListener
70167
{
71-
final boolean as16bit;
72-
73-
public MyActionListener( final boolean as16bit )
168+
final int level;
169+
public MyActionListener( final int level )
74170
{
75-
this.as16bit = as16bit;
171+
this.level = level;
76172
}
77173

78174
@Override
@@ -92,33 +188,33 @@ public void run()
92188
final ArrayList< ViewId > views = new ArrayList<>();
93189
views.addAll( ApplyTransformationPopup.getSelectedViews( panel ) );
94190

95-
// filter not present ViewIds
96-
SpimData2.filterMissingViews( panel.getSpimData(), views );
191+
final SpimData2 data = panel.getSpimData();
192+
final ImgLoader il = data.getSequenceDescription().getImgLoader();
97193

194+
// filter not present ViewIds
195+
SpimData2.filterMissingViews( data, views );
98196

99-
if (
100-
views.size() > askWhenMoreThan &&
101-
JOptionPane.showConfirmDialog(
102-
null,
103-
"Are you sure to display " + views.size() + " views?",
104-
"Warning",
105-
JOptionPane.YES_NO_OPTION ) == JOptionPane.NO_OPTION )
197+
if ( views.size() == 0 )
198+
{
199+
IOFunctions.println( "No views selected" );
106200
return;
201+
}
107202

108-
IOFunctions.println(
109-
"Opening as" + ( as16bit ? " 16 bit" : "32 bit" ) + " using " +
110-
panel.getSpimData().getSequenceDescription().getImgLoader().getClass().getSimpleName() );
203+
IOFunctions.println( "ImageLoader: " + il.getClass().getSimpleName() );
111204

112205
for ( final ViewId view : views )
113206
{
114207
IOFunctions.println( "Loading timepoint: " + view.getTimePointId() + " ViewSetup: " + view.getViewSetupId() );
115-
116208
final String name = "Timepoint: " + view.getTimePointId() + " ViewSetup: " + view.getViewSetupId();
117-
118-
if ( as16bit )
119-
Display_View.display( panel.getSpimData(), view, 1, name );
209+
210+
final RandomAccessibleInterval image;
211+
212+
if ( level <= 0 )
213+
image = il.getSetupImgLoader( view.getViewSetupId() ).getImage( view.getTimePointId() );
120214
else
121-
Display_View.display( panel.getSpimData(), view, 0, name );
215+
image = ((MultiResolutionImgLoader)il).getSetupImgLoader( view.getViewSetupId() ).getImage( view.getTimePointId(), level );
216+
217+
FusionTools.getImagePlusInstance( image, true, name, 0, 255, DisplayImage.service ).show();
122218
}
123219
}
124220
} ).start();

0 commit comments

Comments
 (0)