Creating filter from an ideal 2D step function
Creating filter from an ideal 2D step function
Hello everyone,
How can one generate an edge detection kernel using the ideal 2D step function which is S(x,y)={(a for (xcosθ+ysinθ)<ρ OR a+h for (xcosθ+ysinθ)≥ρ)} which is geometrically represented as follows:
I actually need to generate a 5x5 kernel so that I can apply it onto an image to detect edges. I would appreciate if someone can give me a detailed or high level idea.
Thank you,
How can one generate an edge detection kernel using the ideal 2D step function which is S(x,y)={(a for (xcosθ+ysinθ)<ρ OR a+h for (xcosθ+ysinθ)≥ρ)} which is geometrically represented as follows:
I actually need to generate a 5x5 kernel so that I can apply it onto an image to detect edges. I would appreciate if someone can give me a detailed or high level idea.
Thank you,
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
Unless a is very large, you won't get an ideal circle for a spatial domain filter.
To create a circle, you just use draw "circle ..."
see
http://www.imagemagick.org/Usage/draw/#circles
You would be better to create the JINC function as the filter in the frequency domain using fx "jinc(x)" and apply it to the fourier transform of the image, then transform back. See
http://www.imagemagick.org/script/fx.php
http://www.fmwconcepts.com/imagemagick/ ... al_defocus
To create a circle, you just use draw "circle ..."
see
http://www.imagemagick.org/Usage/draw/#circles
You would be better to create the JINC function as the filter in the frequency domain using fx "jinc(x)" and apply it to the fourier transform of the image, then transform back. See
http://www.imagemagick.org/script/fx.php
http://www.fmwconcepts.com/imagemagick/ ... al_defocus
Re: Creating filter from an ideal 2D step function
You're misunderstanding the question. My is how to generate a 5x5 edge detection kernel from the edge detection?
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
Now I really do not understand what you want! Please clarify.Parshiala wrote:You're misunderstanding the question. My is how to generate a 5x5 edge detection kernel from the edge detection?
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
The circle kernel as an image can be created as an image by using draw "circle ..." and saving as txt: output format. That gives you the values you will need. If the kernel is 5x5, then your constant color (white) circle will have a radius of 2 (2x2+1=diameter). But it won't look much like a circle due to the values being rasters.fmw42 wrote:Now I really do not understand what you want! Please clarify.Parshiala wrote:You're misunderstanding the question. My is how to generate a 5x5 edge detection kernel from the edge detection?
You can also create it from a formula, using fx. See http://www.imagemagick.org/script/fx.php
the value a=1 should be used. theta=atan2(j/i)
Code: Select all
convert size 5x5 xc: fx "x=i2; y=j2; theta=atan2(y,x); r=(x*cos(theta)+y*sin(theta); r<2?1:0" txt:
But all I get for this is solid 100%
Code: Select all
# ImageMagick pixel enumeration: 5,5,65535,srgb
0,0: (100%,100%,100%) #FFFFFFFFFFFF white
1,0: (100%,100%,100%) #FFFFFFFFFFFF white
2,0: (100%,100%,100%) #FFFFFFFFFFFF white
3,0: (100%,100%,100%) #FFFFFFFFFFFF white
4,0: (100%,100%,100%) #FFFFFFFFFFFF white
0,1: (100%,100%,100%) #FFFFFFFFFFFF white
1,1: (100%,100%,100%) #FFFFFFFFFFFF white
2,1: (100%,100%,100%) #FFFFFFFFFFFF white
3,1: (100%,100%,100%) #FFFFFFFFFFFF white
4,1: (100%,100%,100%) #FFFFFFFFFFFF white
0,2: (100%,100%,100%) #FFFFFFFFFFFF white
1,2: (100%,100%,100%) #FFFFFFFFFFFF white
2,2: (100%,100%,100%) #FFFFFFFFFFFF white
3,2: (100%,100%,100%) #FFFFFFFFFFFF white
4,2: (100%,100%,100%) #FFFFFFFFFFFF white
0,3: (100%,100%,100%) #FFFFFFFFFFFF white
1,3: (100%,100%,100%) #FFFFFFFFFFFF white
2,3: (100%,100%,100%) #FFFFFFFFFFFF white
3,3: (100%,100%,100%) #FFFFFFFFFFFF white
4,3: (100%,100%,100%) #FFFFFFFFFFFF white
0,4: (100%,100%,100%) #FFFFFFFFFFFF white
1,4: (100%,100%,100%) #FFFFFFFFFFFF white
2,4: (100%,100%,100%) #FFFFFFFFFFFF white
3,4: (100%,100%,100%) #FFFFFFFFFFFF white
4,4: (100%,100%,100%) #FFFFFFFFFFFF white
Perhaps someone else can see what I am doing wrong.

 Posts: 13034
 Joined: 20100123T23:01:3307:00
 Authentication code: 1151
 Location: England, UK
Re: Creating filter from an ideal 2D step function
Unbalanaced parentheses, and "r" is a reserved word. This works:
Code: Select all
%IM%convert size 5x5 xc: fx "XX=i2;YY=j2;theta=atan2(YY,XX);RR=XX*cos(theta)+YY*sin(theta);RR<2?1:0" txt:
snibgo's IM pages: im.snibgo.com
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
Yes, thanks snibgo.
This might be better as it sets values exactly equal to rad=2 to 0.5 so there is some antialiasing.
This might be better as it sets values exactly equal to rad=2 to 0.5 so there is some antialiasing.
Code: Select all
convert size 5x5 xc: fx "xx=i2; yy=j2; theta=atan2(yy,xx); rr=xx*cos(theta)+yy*sin(theta); rr<2?1:rr>2?0:rr==2?0.5:0" txt:
Code: Select all
# ImageMagick pixel enumeration: 5,5,65535,srgb
0,0: (0%,0%,0%) #000000000000 black
1,0: (0%,0%,0%) #000000000000 black
2,0: (50.0008%,50.0008%,50.0008%) #800080008000 srgb(50.0008%,50.0008%,50.0008%)
3,0: (0%,0%,0%) #000000000000 black
4,0: (0%,0%,0%) #000000000000 black
0,1: (0%,0%,0%) #000000000000 black
1,1: (100%,100%,100%) #FFFFFFFFFFFF white
2,1: (100%,100%,100%) #FFFFFFFFFFFF white
3,1: (100%,100%,100%) #FFFFFFFFFFFF white
4,1: (0%,0%,0%) #000000000000 black
0,2: (50.0008%,50.0008%,50.0008%) #800080008000 srgb(50.0008%,50.0008%,50.0008%)
1,2: (100%,100%,100%) #FFFFFFFFFFFF white
2,2: (100%,100%,100%) #FFFFFFFFFFFF white
3,2: (100%,100%,100%) #FFFFFFFFFFFF white
4,2: (50.0008%,50.0008%,50.0008%) #800080008000 srgb(50.0008%,50.0008%,50.0008%)
0,3: (0%,0%,0%) #000000000000 black
1,3: (100%,100%,100%) #FFFFFFFFFFFF white
2,3: (100%,100%,100%) #FFFFFFFFFFFF white
3,3: (100%,100%,100%) #FFFFFFFFFFFF white
4,3: (0%,0%,0%) #000000000000 black
0,4: (0%,0%,0%) #000000000000 black
1,4: (0%,0%,0%) #000000000000 black
2,4: (50.0008%,50.0008%,50.0008%) #800080008000 srgb(50.0008%,50.0008%,50.0008%)
3,4: (0%,0%,0%) #000000000000 black
4,4: (0%,0%,0%) #000000000000 black
Re: Creating filter from an ideal 2D step function
@fmw42: Thank you so much I scanned through your post again, implemented and got just what I was looking for. Thanks again.
Just one theoretical question, I was wondering how the values within an edge detection kernel be interpreted. For instance, in a simple edge detection matrix as this: [ 2 2 2 2 2 ; 1 1 1 1 1 ; 0 0 0 0 0 ; 1 1 1 1 1 ; 2 2 2 2 2], I can see that the sum of all values within the matrix equals zero. Also, the values are adjusted such that zeros fall horizontally in middle of the overlapped image. And the intensities change as we move towards the top and bottom of the matrix. This is take care of the intensity variations and distinguishing the edge pixels from the ones immediately next to those pixels, am I correct?
Just one theoretical question, I was wondering how the values within an edge detection kernel be interpreted. For instance, in a simple edge detection matrix as this: [ 2 2 2 2 2 ; 1 1 1 1 1 ; 0 0 0 0 0 ; 1 1 1 1 1 ; 2 2 2 2 2], I can see that the sum of all values within the matrix equals zero. Also, the values are adjusted such that zeros fall horizontally in middle of the overlapped image. And the intensities change as we move towards the top and bottom of the matrix. This is take care of the intensity variations and distinguishing the edge pixels from the ones immediately next to those pixels, am I correct?
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
I just posted what you requested by the formula you provided. I am not sure what you are being asked to do. A circle of with constant white interior and constant black outside is a low pass filter. If you make it black inside and white outside, it is a high pass filter. Neither are edge detectors. Do you have more of a reference.
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
Perhaps what you want is directional derivative. See
http://www.fmwconcepts.com/imagemagick/ ... /index.php
and
the directional derivative section of
http://www.fmwconcepts.com/imagemagick/ ... tering.pdf
where it has the same formula, but uses unit derivative x'=d/dx and y'=d/dy rather than x and y.
Pick any of the prewitt or sobel, etc d/dx and d/dy or my 5x5 binomial weighted digital kernels and use those with your formula, element by element.
My script above will compute it for the prewitt type filter
http://www.fmwconcepts.com/imagemagick/ ... /index.php
and
the directional derivative section of
http://www.fmwconcepts.com/imagemagick/ ... tering.pdf
where it has the same formula, but uses unit derivative x'=d/dx and y'=d/dy rather than x and y.
Pick any of the prewitt or sobel, etc d/dx and d/dy or my 5x5 binomial weighted digital kernels and use those with your formula, element by element.
My script above will compute it for the prewitt type filter
Ideal two dimensional step function
I have asked the implementation of this part before. However, I am confused about the understanding the representation.
So currently implementing a 5x5 kernel using the following ideal twodimensional step function:
My first question is: Is this ideal 2D step function based on Heuckel's algorithm?
This function is geometrically represented as follows:
I have generated the 5x5 by iterating the rows and columns up to 5 units. However, I am still trying to understand the geometric representation. Given I want to construct a 5x5 kernel and 'a' here denotes the diameter, what would be the radius? And what is 'h' in 'a+h'. Overall, how can one interpret this geometric representation?
So currently implementing a 5x5 kernel using the following ideal twodimensional step function:
My first question is: Is this ideal 2D step function based on Heuckel's algorithm?
This function is geometrically represented as follows:
I have generated the 5x5 by iterating the rows and columns up to 5 units. However, I am still trying to understand the geometric representation. Given I want to construct a 5x5 kernel and 'a' here denotes the diameter, what would be the radius? And what is 'h' in 'a+h'. Overall, how can one interpret this geometric representation?

 Posts: 13034
 Joined: 20100123T23:01:3307:00
 Authentication code: 1151
 Location: England, UK
Re: Ideal two dimensional step function
I am merging this thread with your other one.
'a' represents the value returned for the unhatched area, where (x.cosTheta + y.sinTheta) < rho.
'a+h' represents the value returned for the hatched area.
Hueckel's name is spelled with UE, not EU.
No, it doesn't.Parshiala wrote:... and 'a' here denotes the diameter,
'a' represents the value returned for the unhatched area, where (x.cosTheta + y.sinTheta) < rho.
'a+h' represents the value returned for the hatched area.
Hueckel's name is spelled with UE, not EU.
snibgo's IM pages: im.snibgo.com
 fmw42
 Posts: 26383
 Joined: 20070702T17:14:5107:00
 Authentication code: 1152
 Location: Sunnyvale, California, USA
Re: Creating filter from an ideal 2D step function
Using a step function is not going to create an edge image as far as I know. It is going to blur your image, since it is a low pass filter. I think you need the directional derivative, which uses the same type formula, but x is the x first derivative (x') and y is the y first derivative (y'). Look at my reference to digital image filtering as listed above.