PlugInAlgorithmCT MD.java

From MIPAV
Jump to: navigation, search
Figure 25. PlugInAlgorithmCT_MD.java

- |
15 * Fat: -190 to -30
16 * Low density muscle: 0 to 30
17 * High density muscle: 31 to 100
18 * If you have any questions, please drop me a line.
19 * =====
20 * Matthew J. Delmonico, MS, MPH
21 * Graduate Research Assistant, Exercise Physiology
22 * 2132 HHP Building
23 * University of Maryland
24 * College Park, MD 20742
25 * (301) 405-2569
26 * (301) 793-0567 (cell)
27 *
28 * @version July 12, 2002
29 * @author
30 * @see AlgorithmBase
31 *
32 * $Logfile: /mipav/src/plugins/PlugInAlgorithmCT_MD.java $
33 * $Revision: 10 $
34 * $Date: 10/13/04 1:09p $
35 *
36 */
37 public class PlugInAlgorithmCT_MD extends AlgorithmBase {
38
39
40 private boolean entireImage = true;
41
42 public int fatL = -190;
43 public int fatH = -30;
44
45 public int ldmL = 0;
46 public int ldmH = 30;
47
48 public int hdmL = 31;
49 public int hdmH = 100;
50
51
52 /**
53 * Constructor for 3D images in which changes are placed in a predetermined
54 * destination image.
55 * @param destImg Image model where result image is to stored.
56 * @param srcImg Source image model.
57 */
58 public PlugInAlgorithmCT_MD(ModelImage destImg, ModelImage srcImg) {
59 super(destImg, srcImg);
60 }
61
62 /**
63 * Prepares this class for destruction.
64 */
65 public void finalize(){
66 destImage = null;
67 srcImage = null;
68 super.finalize();
69 }
70
|}
</font></div>
{| border="1" cellpadding="5" |+
Figure 330. PlugInAlgorithmCT_MD.java
|- |
71 /**
72 * Starts the algorithm.
73 */
74 public void run() {
75
76 if (srcImage == null) {
77 displayError("Source Image is null");
78 notifyListeners(this);
79 return;
80 }
81 if (destImage == null) {
82 displayError("Source Image is null");
83 notifyListeners(this);
84 return;
85 }
86
87
88 // start the timer to compute the elapsed time
89 setStartTime();
90
91 if (destImage != null){ // if there exists a destination image
92 if (srcImage.getNDims() == 2){
93 calcStoreInDest2D();
94 }
95 else if (srcImage.getNDims() > 2) {
96 calcStoreInDest3D();
97 }
98 }
99
100 // compute the elapsed time
101 computeElapsedTime();
102 notifyListeners(this);
103 }
104
105 /**
106 * This function produces a new image that has been median filtered and places
107 * filtered image in the destination image.
108 */
109 private void calcStoreInDest2D(){
110
111
112 int length; // total number of data-elements (pixels) in image
113 float buffer[]; // data-buffer (for pixel data) which is the "heart"
114 // of the image
|- |
115 try {
116 // image length is length in 2 dims
117 length = srcImage.getExtents()[0] * srcImage.getExtents()[1];
118 buffer = new float[length];
119 srcImage.exportData(0,length, buffer); // locks and releases lock
120 }
121 catch (IOException error) {
122 buffer = null;
123 errorCleanUp("Algorithm CT_MD reports: source image locked", true);
124 return;
125 }
126 catch (OutOfMemoryError e){
127 buffer = null;
128 errorCleanUp("Algorithm CT_MD reports: out of memory", true);
129 return;
130 }
131
132 int mod = length/100; // mod is 1 percent of length
133 initProgressBar();
134
135 // Fat: -190 to -30
136 // Low density muscle: 0 to 30
137 // High density muscle: 31 to 100
138 BitSet mask = null;
139 if (srcImage.getVOIs().size() > 0 ) {
140 mask = srcImage.generateVOIMask();
141 entireImage = false;
142 }
143
144 int fat = 0;
145 int ldMuscle = 0;
146 int hdMuscle = 0;
147 for (int i = 0; i < length && !threadStopped; i ){
148 if (isProgressBarVisible() && (i)%mod==0)
149 progressBar.setValue(Math.round((float)(i)/(length-1) * 100));
150
151 if (entireImage == true || mask.get(i) ) {
152 if( buffer[i] >= fatL && buffer[i] <= fatH ) {
153 destImage.set(i, 20);
154 fat ;
155 }
156 else if( buffer[i] >= ldmL && buffer[i] <= ldmH ) {
157 destImage.set(i, 40);
158 ldMuscle ;
159 }
160 else if( buffer[i] >= hdmL && buffer[i] <= hdmH ) {
161 destImage.set(i, 60);
162 hdMuscle ;
163 }
164 else {
165 destImage.set(i, 0);
166 //buffer[i] = (float)srcImage.getMin();
167
168 }
169 }
170 }
171
172
|- |
173 //destImage.releaseLock();
174
175 if (threadStopped) {
176 finalize();
177 return;
178 }
179
180 float area = srcImage.getFileInfo()[0].getResolutions()[0] *
181 srcImage.getFileInfo()[0].getResolutions()[1];
182
183 destImage.getUserInterface().getMessageFrame().append("Number of Fat pixels = "
184 fat , ViewJFrameMessage.DATA );
185 destImage.getUserInterface().getMessageFrame().append(" Area = " (fat*area)
186 " mm^2\n", ViewJFrameMessage.DATA );
187
188 destImage.getUserInterface().getMessageFrame().append("Number of LDM pixels = "
189 ldMuscle , ViewJFrameMessage.DATA );
190 destImage.getUserInterface().getMessageFrame().append(" Area = " (ldMuscle*area)
191 " mm^2\n", ViewJFrameMessage.DATA );
192
193 destImage.getUserInterface().getMessageFrame().append("Number of HDM pixels = "
194 hdMuscle , ViewJFrameMessage.DATA );
195 destImage.getUserInterface().getMessageFrame().append(" Area = " (hdMuscle*area)
196 " mm^2\n", ViewJFrameMessage.DATA );
197
198 destImage.calcMinMax();
199 setCompleted(true);
200 }
201
202 /**
203 * This function produces a new volume image that has been median filtered.
204 * Image can be filtered by filtering each slice individually, or by filtering
205 * using a kernel-volume.
206 */
207 private void calcStoreInDest3D(){
208
209 int totLength, imgLength;
210 float buffer[];
211
212 float vol = srcImage.getFileInfo()[0].getResolutions()[0] *
213 srcImage.getFileInfo()[0].getResolutions()[1] *
214 srcImage.getFileInfo()[0].getResolutions()[2];
215
216 try {
217 // image totLength is totLength in 3 dims
218 imgLength = srcImage.getSliceSize();
219 totLength = srcImage.getSliceSize() * srcImage.getExtents()[2];
220 buffer = new float[totLength];
221 srcImage.exportData(0,totLength, buffer); // locks and releases lock
222 buildProgressBar(srcImage.getImageName(), "Processing image ...", 0, 100);
223 }
224
225 catch (IOException error) {
226 buffer = null;
227 errorCleanUp("Algorithm CT_MD: source image locked", true);
228 return;
229 }
|- |
230 catch (OutOfMemoryError e){
231 buffer = null;
232 errorCleanUp("Algorithm CT_MD: Out of memory creating process buffer", true);
233 return;
234 }
235
236 int totFat = 0;
237 int totLdMuscle = 0;
238 int totHdMuscle = 0;
239 initProgressBar();
240
241 for (int i = 0; i < srcImage.getExtents()[2] && !threadStopped; i ){
242 int fat = 0;
243 int ldMuscle = 0;
244 int hdMuscle = 0;
245
246 if ( isProgressBarVisible() )
247 progressBar.setValue(Math.round((float)(i)/(srcImage.getExtents()[2]-1) *
248 100));
249
250 for (int j = 0; j < imgLength && !threadStopped; j ){
251 //System.out.println(" j = " j);
252 int index = i*imgLength j;
253 if( buffer[index] >= fatL && buffer[index] <= fatH ) {
254 destImage.set(index, 60);
255 totFat ;
256 fat ;
257 }
258 else if( buffer[index] >= ldmL && buffer[index] <= ldmH ) {
259 destImage.set(index, 120);
260 totLdMuscle ;
261 ldMuscle ;
262 }
263 else if( buffer[index] >= hdmL && buffer[index] <= hdmH ) {
264 destImage.set(index, 200);
265 totHdMuscle ;
266 hdMuscle ;
267 }
268 else {
269 destImage.set(index, 0);
270 //buffer[i] = -1024;
271 }
272 }
273 destImage.getUserInterface().getMessageFrame().append("\n\n ***************** Slice
274 " i " totals ***************\n",
275 ViewJFrameMessage.DATA);
276 destImage.getUserInterface().getMessageFrame().append("Number of fat pixels = "
277 fat , ViewJFrameMessage.DATA );
278 destImage.getUserInterface().getMessageFrame().append(" Volume = " (fat*vol)
279 " mm^3\n", ViewJFrameMessage.DATA );
280
281 destImage.getUserInterface().getMessageFrame().append("Number of LDM pixels = "
282 ldMuscle , ViewJFrameMessage.DATA );
283 destImage.getUserInterface().getMessageFrame().append(" Volume = "
284 (ldMuscle*vol) " mm^3\n", ViewJFrameMessage.DATA );
285
|- |
286 destImage.getUserInterface().getMessageFrame().append("Number of HDM pixels
287 = " hdMuscle , ViewJFrameMessage.DATA );
288 destImage.getUserInterface().getMessageFrame().append(" Volume = "
289 (hdMuscle*vol) " mm^3\n", ViewJFrameMessage.DATA );
290 }
291
292 destImage.releaseLock();
293
294 if (threadStopped) {
295 finalize();
296 return;
297 }
298
299 destImage.getUserInterface().getMessageFrame().append("\n ************************
300 Totals ********************\n",
301 ViewJFrameMessage.DATA);
302 destImage.getUserInterface().getMessageFrame().append("Number of totFat pixels = "
303 totFat , ViewJFrameMessage.DATA );
304 destImage.getUserInterface().getMessageFrame().append(" Volume = " (totFat*vol)
305 " mm^3\n", ViewJFrameMessage.DATA );
306
307 destImage.getUserInterface().getMessageFrame().append("Number of LDM pixels = "
308 totLdMuscle , ViewJFrameMessage.DATA );
309 destImage.getUserInterface().getMessageFrame().append(" Volume = " (totLdMuscle*vol)
310 " mm^3\n", ViewJFrameMessage.DATA );
311
312 destImage.getUserInterface().getMessageFrame().append("Number of HDM pixels = "
313 totHdMuscle , ViewJFrameMessage.DATA );
314 destImage.getUserInterface().getMessageFrame().append(" Volume = " (totHdMuscle*vol)
315 " mm^3\n", ViewJFrameMessage.DATA );
316
317 destImage.calcMinMax();
318 progressBar.dispose();
319 setCompleted(true);
320 }
321 }
|}

Next: Plug-in CT_MD.java

See also: