Problem with ImagePlus getPixel method

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Problem with ImagePlus getPixel method

Mathias Zech
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
Reply | Threaded
Open this post in threaded view
|

Re: Problem with ImagePlus getPixel method

Jeffrey B. Woodward
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
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Problem with ImagePlus getPixel method

Mathias Zech
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
>>
>>