Hello,
I have just found an interesting problem with the getPixel method of ImagePlus. I will illustrate it with some example code. It is important to know, that I created the image via a BinaryProcessor and did not display/show it before reaching this code: for(Point point : points) { int[] values = imgBinary.getPixel(point.x, point.y); System.out.println("VAL: " + values[0] + "/" + values[1] + "/" + values[2] + "/" + values[3]); if(values[0] != 0) { //color black == 0 == outside removePoints.add(point); } //if } //for When I run this, the content of values is always 0, the output looks something like this: VAL: 0/0/0/0 VAL: 0/0/0/0 VAL: 0/0/0/0 VAL: 0/0/0/0 VAL: 0/0/0/0 When I display the image beforehand, however, the code works as expected: imgBinary.show(); imgBinary.hide(); for(Point point : points) { int[] values = imgBinary.getPixel(point.x, point.y); System.out.println("VAL: " + values[0] + "/" + values[1] + "/" + values[2] + "/" + values[3]); if(values[0] != 0) { //color black == 0 == outside removePoints.add(point); } //if } //for The output then looks like this: VAL: 0/0/0/0 VAL: 0/0/0/0 VAL: 255/0/0/0 VAL: 0/0/0/0 VAL: 0/0/0/0 The second case it what I expect but why do I need to call show() before I can use getPixel? I do not want to do this at that moment because this image is just a temporary helper image which I do save if debugging is enabled but usually just throw away after this section of code completes. I hope someone has an idea, thanks in advance! Mathias |
I assume that in the code below that imgBinary is an instanceof
ImagePlus. If so, try calling imgBinary.updateImage() after you updated the corresponding BinaryProcessor and before you call imgBinary.getPixel(). -Woody Mathias Zech wrote: > Hello, > > I have just found an interesting problem with the getPixel method of > ImagePlus. I will illustrate it with some example code. It is > important to know, that I created the image via a BinaryProcessor and > did not display/show it before reaching this code: > > for(Point point : points) { > int[] values = imgBinary.getPixel(point.x, point.y); > System.out.println("VAL: " + values[0] + "/" + values[1] + > "/" + values[2] + "/" + values[3]); > if(values[0] != 0) { //color black == 0 == outside > removePoints.add(point); > } //if > } //for > > When I run this, the content of values is always 0, the output looks > something like this: > > VAL: 0/0/0/0 > VAL: 0/0/0/0 > VAL: 0/0/0/0 > VAL: 0/0/0/0 > VAL: 0/0/0/0 > > > When I display the image beforehand, however, the code works as expected: > > imgBinary.show(); > imgBinary.hide(); > for(Point point : points) { > int[] values = imgBinary.getPixel(point.x, point.y); > System.out.println("VAL: " + values[0] + "/" + values[1] + > "/" + values[2] + "/" + values[3]); > if(values[0] != 0) { //color black == 0 == outside > removePoints.add(point); > } //if > } //for > > The output then looks like this: > VAL: 0/0/0/0 > VAL: 0/0/0/0 > VAL: 255/0/0/0 > VAL: 0/0/0/0 > VAL: 0/0/0/0 > > The second case it what I expect but why do I need to call show() > before I can use getPixel? I do not want to do this at that moment > because this image is just a temporary helper image which I do save if > debugging is enabled but usually just throw away after this section of > code completes. > > I hope someone has an idea, thanks in advance! > Mathias > > |
THank you, I forgot to mention that it was an ImagePlus instance.
Calling updateImage() solves the problem! Thanks a lot! Mathias Jeffrey B. Woodward wrote: > I assume that in the code below that imgBinary is an instanceof > ImagePlus. If so, try calling imgBinary.updateImage() after you > updated the corresponding BinaryProcessor and before you call > imgBinary.getPixel(). > > -Woody > > > Mathias Zech wrote: >> Hello, >> >> I have just found an interesting problem with the getPixel method of >> ImagePlus. I will illustrate it with some example code. It is >> important to know, that I created the image via a BinaryProcessor and >> did not display/show it before reaching this code: >> >> for(Point point : points) { >> int[] values = imgBinary.getPixel(point.x, point.y); >> System.out.println("VAL: " + values[0] + "/" + values[1] + >> "/" + values[2] + "/" + values[3]); >> if(values[0] != 0) { //color black == 0 == outside >> removePoints.add(point); >> } //if >> } //for >> >> When I run this, the content of values is always 0, the output looks >> something like this: >> >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> >> >> When I display the image beforehand, however, the code works as >> expected: >> >> imgBinary.show(); >> imgBinary.hide(); >> for(Point point : points) { >> int[] values = imgBinary.getPixel(point.x, point.y); >> System.out.println("VAL: " + values[0] + "/" + values[1] + >> "/" + values[2] + "/" + values[3]); >> if(values[0] != 0) { //color black == 0 == outside >> removePoints.add(point); >> } //if >> } //for >> >> The output then looks like this: >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> VAL: 255/0/0/0 >> VAL: 0/0/0/0 >> VAL: 0/0/0/0 >> >> The second case it what I expect but why do I need to call show() >> before I can use getPixel? I do not want to do this at that moment >> because this image is just a temporary helper image which I do save >> if debugging is enabled but usually just throw away after this >> section of code completes. >> >> I hope someone has an idea, thanks in advance! >> Mathias >> >> |
Free forum by Nabble | Edit this page |