http://imagej.273.s1.nabble.com/Convolution-kernels-tp3693561p3693565.html
That explains it. It should have been pretty obvious since it says
reading about 2x2 kernels. Thanks- Dave
> David,
>
> As Bob pointed out, the parameter value that you enter in the dialog
> of the
> "Mean..." filter is the radius of the filter, not the diameter. The
> mean
> filter uses circular kernels instead of square kernels. From the
> RankFilters
> source code:
> "Radius = 0.5 includes the 4 neighbors of the pixel in the center, "
> 010
> 111
> 010
>
> "radius = 1 corresponds to a 3x3 kernel size."
> 111
> 111
> 111
>
> For radius 2, the kernel used look like :
> 01110
> 11111
> 11111
> 11111
> 01110
>
> etc.
>
> Sincerely,
> Jerome.
>
>
>>
>> On Thu, Feb 26, 2009 at 8:33 PM, David Knecht
>> <
[hidden email]>wrote:
>>
>>> Hi BOb- To test, I took a 20x20 black image and put a single 255
>>> white
>>> pixel in the middle. Then I ran a 2x2 mean filter. I would have
>>> predicted
>>> that only the pixels surrounding the white pixel would be affected
>>> since all
>>> the others are more than 2 pixels away. I got a pattern of values
>>> of 12 up
>>> to that is 5 pixels high and wide. Dave
>>>
>>>
>>> On Feb 26, 2009, at 12:13 PM, Robert Dougherty wrote:
>>>
>>> Prof. Knecht,
>>>>
>>>> Looking under the hood, the convolution code starts by making a
>>>> copy of
>>>> the image. It then replaces each pixel of the original image by a
>>>> computation made from the copy. This is how it should be. I
>>>> wonder about
>>>> your test methodology. As for the edges, I had assumed zero-
>>>> padding, but it
>>>> is actually more interesting. The input image is effectively
>>>> extended by
>>>> duplicating the edge pixels outward, perpendicular to the image.
>>>> The corner
>>>> areas are effectively filled with the value of the corner pixel.
>>>> Here is
>>>> the code to get a pixel from location (x,y) to use in the
>>>> convolution. If x
>>>> is outside the image, then x is replaced with the closest x that
>>>> is part of
>>>> the image, and similarly for y.
>>>>
>>>> private float getPixel(int x, int y, float[] pixels, int width,
>>>> int
>>>> height) {
>>>> if (x<=0) x = 0;
>>>> if (x>=width) x = width-1;
>>>> if (y<=0) y = 0;
>>>> if (y>=height) y = height-1;
>>>> return pixels[x+y*width];
>>>> }
>>>>
>>>> Bob
>>>>
>>>> On Feb 26, 2009, at 8:01 AM, David Knecht wrote:
>>>>
>>>> I am trying to understand how a convolution like a 2x2 mean filter
>>>>> actually works. I presume it always starts in the upper left of
>>>>> the image.
>>>>> It would then calculate the average of those first 4 pixels. I
>>>>> thought
>>>>> that the sliding window of the convolution resets as it moves so
>>>>> that you
>>>>> are always calculating from the original values of the image
>>>>> matrix as
>>>>> opposed to using the new calculated value from applying the
>>>>> convolution. I
>>>>> ran a test to confirm, and to my surprise it appears that the
>>>>> convolution is
>>>>> applied continuously. Is that right? Is this described
>>>>> somewhere in the
>>>>> documentation? I would imagine that you could filter either way
>>>>> and it is
>>>>> just how the algorithm is implemented. Also, is it described
>>>>> somewhere how
>>>>> imageJ handle the edges? Dave
>>>>>
>>>>> Dr. David Knecht
>>>>> Department of Molecular and Cell Biology
>>>>> Co-head Flow Cytometry and Confocal Microscopy Facility
>>>>> U-3125
>>>>> 91 N. Eagleville Rd.
>>>>> University of Connecticut
>>>>> Storrs, CT 06269
>>>>> 860-486-2200
>>>>> 860-486-4331 (fax)
>>>>>
>>>>
>>>> Robert Dougherty, Ph.D.
>>>> President, OptiNav, Inc.
>>>> 4176 148th Ave. NE
>>>> Redmond, WA 98052
>>>> (425)891-4883
>>>> FAX (425)467-1119
>>>> www.optinav.com
>>>>
[hidden email]
>>>>
>>>
>>> Dr. David Knecht
>>> Department of Molecular and Cell Biology
>>> Co-head Flow Cytometry and Confocal Microscopy Facility
>>> U-3125
>>> 91 N. Eagleville Rd.
>>> University of Connecticut
>>> Storrs, CT 06269
>>> 860-486-2200
>>> 860-486-4331 (fax)
>>>
>>
>>
Dr. David Knecht
91 N. Eagleville Rd.