Nevanlinna's criterion: Difference between revisions

From formulasearchengine
Jump to navigation Jump to search
en>Myasuda
m sp
en>Quondum
replacing redirect Holomorphic to dab page with appropriate destination Holomorphic function
 
Line 1: Line 1:
{{no footnotes|date=March 2013}}
My name is Lillie (31 years old) and my hobbies are Taxidermy and Basket Weaving.<br><br>Have a look at my blog [http://www.termlifepolicy.com/insurance-companies/nationwide-mutual.html/rk=0 life insurance policy types]
'''Deriche edge detector''' is an [[edge detection]] operator developed by Rachid Deriche in 1987. It's a multistep [[algorithm]] used to obtain an optimal result of edge detection in a discrete two-dimensional image. This algorithm is based on [[John F. Canny]]'s work related to the edge detection ([[Canny edge detector|Canny's edge detector]]) and his criteria for optimal edge detection:
 
* ''Detection quality'' – all existing edges should be marked and no false detection should occur.
* ''Accuracy'' - the marked edges should be as close to the edges in the real image as possible.
* ''Unambiguity'' - a given edge in the image should only be marked once. No multiple responses to one edge in the real image should occur.
 
For this reason, this algorithm is often referred to as Canny-Deriche detector.
 
== Differences between Canny and Deriche edge detector ==
Deriche edge detector, like [[Canny edge detector]], consists of the following 4 steps:
# ''Smoothing''
# ''Calculation of magnitude and gradient direction''
# ''Non-maximum suppression''
# ''Hysteresis thresholding (using two thresholds)''
 
The essential difference is in the [[implementation]] of the first two steps of the algorithm. Unlike the Canny edge detector, Deriche edge detector uses the [[Infinite impulse response|IIR]] filter in the form:
 
: <math> f(x)=\frac{S}{\omega}e^{-\alpha|x|}sin\omega x </math>
 
The filter optimizes the Canny criteria. As is evident from the preceding formula, the most effective filter is obtained when the value of <math>\omega</math> approaches 0. Such filter then uses the formula:
 
: <math> f(x)=Sxe^{-\alpha|x|}</math>
 
The advantage of such a filter is that it can be adapted to the characteristics of the processed image using only one parameter. If the value of α is small (usually between 0.25 and 0.5), it results in better detection. On the other hand, better localization is achieved when the parameter has a higher value (around 2 or 3). For most of the normal cases parameter value of around 1 is recommended.
 
{| class="wikitable" border="1" cellpadding="2" width="700" style="text-align:center;margin: 1em auto 1em auto"
|+Example of smoothing using Deriche filter
|-
! Image
|[[File:Sun flower - Deriche filter smoothing - alpha = 0.25.jpg|thumb|center]]
|[[File:Sun flower - Deriche filter smoothing - alpha = 0.5.jpg|thumb|center]]
|[[File:Sun flower - Deriche filter smoothing - alpha = 1.jpg|thumb|center]]
|[[File:Sun flower - Deriche filter smoothing - alpha = 2.jpg|thumb|center]]
|-
!  &alpha;
| &alpha; = 0.25
| &alpha; = 0.5
| &alpha; = 1
| &alpha; = 2
|}
 
Using the IIR filter makes sense especially in cases where the processed image is noisy or a large amount of smoothing is required (which leads to large convolution kernel for FIR filter). In these cases, the Deriche detector has considerable advantage over the Canny detector, because it is able to process images in a short constant time independent of the desired amount of smoothing.
 
== Deriche detector implementation ==
It's possible to separate the process of obtaining the value of a two-dimensional Deriche filter into two parts. In first part, image array is passed in the horizontal direction from left to right according to the following formula:
 
: <math>y_{ij}^1=a_1x_{ij}+a_2x_{ij-1}+b_1y_{ij-1}^1+b_2y_{ij-2}^1</math>
 
and from right to left according to the formula:
 
: <math>y_{ij}^2=a_3x_{ij+1}+a_4x_{ij+2}+b_1y_{ij+1}^2+b_2y_{ij+2}^2</math>
 
The result of the computation is then stored into temporary two-dimensional array:
 
: <math>\theta_{ij}=c_1(y_{ij}^1+y_{ij}^2)</math>
 
The second step of the algorithm is very similar to the first one. The two-dimensional array from the previous step is used as the input. It is then passed in the vertical direction from top to bottom and bottom-up according to the following formulas:
 
: <math>y_{ij}^1=a_5\theta_{ij}+a_6\theta_{i-1j}+b_1y_{i-1j}^1+b_2y_{i-2j}^1</math>
 
: <math>y_{ij}^2=a_7\theta_{i+1j}+a_8\theta_{i+2j}+b_1y_{i+1j}^2+b_2y_{i+2j}^2</math>
 
: <math>\Theta_{ij}=c_2(y_{ij}^1+y_{ij}^2)</math>
 
The description of the algorithm implies that the processed rows and columns are independent of each other. As a result, the solution based on the IIR filter is often employed in embedded systems and architectures, which support a high level of parallelization, such as [[CUDA|NVIDIA CUDA]].
 
{| class="wikitable" align="center" style="text-align:center;border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #000; padding: 0;margin: 1em auto 1em auto"
|+Deriche filter coefficients
!style="border-style: solid;border-width: 0 1px 1px 0"|
! style="border-style: solid;border-width: 0 0 1px 0"|smoothing
! style="border-style: solid;border-width: 0 0 1px 0"|x-derivative
! style="border-style: solid;border-width: 0 0 1px 0"|y-derivative
|-
!style="border-style: solid;border-width: 0 1px 1px 0"|<math>k</math>
|style="border-style: solid;border-width: 0 0 1px 0"|  <math>\frac{{(1-e^{-\alpha})}^2}{1+2\alpha e^{-\alpha}-e^{-2\alpha}}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|  <math>\frac{{(1-e^{-\alpha})}^2}{1+2\alpha e^{-\alpha}-e^{-2\alpha}}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|  <math>\frac{{(1-e^{-\alpha})}^2}{1+2\alpha e^{-\alpha}-e^{-2\alpha}}</math>
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_1</math>
|style="border-style: none"|<math>k</math>
|style="border-style: none"|0
|style="border-style: none"|<math>k</math>
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_2</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha-1)</math>
|style="border-style: none"|1
|style="border-style: none"|<math>ke^{-\alpha}(\alpha-1)</math>
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_3</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha+1)</math>
|style="border-style: none"| -1
|style="border-style: none"|<math>ke^{-\alpha}(\alpha+1)</math>
|-
!style="border-style: solid;border-width: 0 1px 1px 0"|<math>a_4</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-ke^{-2\alpha}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|0
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-ke^{-2\alpha}</math>
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_5</math>
|style="border-style: none"|<math>k</math>
|style="border-style: none"|<math>k</math>
|style="border-style: none"|0
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_6</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha-1)</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha-1)</math>
|style="border-style: none"|1
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>a_7</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha+1)</math>
|style="border-style: none"|<math>ke^{-\alpha}(\alpha+1)</math>
|style="border-style: none"| -1
|-
!style="border-style: solid;border-width: 0 1px 1px 0"|<math>a_8</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-ke^{-2\alpha}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-ke^{-2\alpha}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|0
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>b_1</math>
|style="border-style: none"|<math>2e^{-\alpha}</math>
|style="border-style: none"|<math>2e^{-\alpha}</math>
|style="border-style: none"|<math>2e^{-\alpha}</math>
|-
!style="border-style: solid;border-width: 0 1px 1px 0"|<math>b_2</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-e^{-2\alpha}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-e^{-2\alpha}</math>
|style="border-style: solid;border-width: 0 0 1px 0"|<math>-e^{-2\alpha}</math>
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>c_1</math>
|style="border-style: none"|1
|style="border-style: none"|<math>-{(1-e^{-\alpha})}^2</math>
|style="border-style: none"|1
|-
!style="border-style: solid;border-width: 0 1px 0 0"|<math>c_2</math>
|style="border-style: none"|1
|style="border-style: none"|1
|style="border-style: none"|<math>-{(1-e^{-\alpha})}^2</math>
|}
 
The mathematical properties of the algorithm are often used in practical implementation of the Deriche detector. It is sufficient to implement only one part of the algorithm, which is then called twice, while performing a transposition of the resulting matrix.
 
{| class="wikitable" border="1" cellpadding="2" width="800" style="text-align:center;margin: 1em auto 1em auto"
|+ Examples of using Deriche filter on various source images
|-
! Source image
|[[File:Sunflowers in July.jpg|thumb|center|upright=0.65]]
|[[File:Magician artwork.jpg|thumb|center|upright=0.6]]
|[[File:F1A glider hook.jpg|thumb|center|upright=0.65]]
|[[File:Grapevine leaf.jpg|thumb|center|upright=1.1]]
|-
! Filtered image
|[[File:Sunflowers image processed by Deriche edge detector.jpg|thumb|center|upright=0.65]]
|[[File:Magician processed by Deriche edge detector.jpg|thumb|center|upright=0.6]]
|[[File:F1A glider hook processed by Deriche edge detector.jpg|thumb|center|upright=0.65]]
|[[File:Grapevine leaf processed by Deriche edge detector.jpg|thumb|center|upright=1.1]]
|-
! Filter parameters
| &alpha; = 1.5<br />low threshold = 20<br />high threshold = 40
| &alpha; = 4.0<br />low threshold = 50<br />high threshold = 90
| &alpha; = 0.8<br />low threshold = 26<br />high threshold = 41
| &alpha; = 1.0<br />low threshold = 15<br />high threshold = 35
|}
 
== See also ==
* [[Canny edge detector]]
* [[infinite impulse response|IIR]]
* [[Edge detection]]
 
== Further reading ==
* R. Deriche, ''Using Canny's criteria to derive a recursively implemented optimal edge detector'', Int. J. Computer Vision, Vol. 1, pp.&nbsp;167–187, April 1987.
* R. Sirdey, ''A Gentle Introduction to the Deriche Optimal Edge Detector'', Éditions des Nik's news, 1998.
* J. Canny, ''A Computational Approach To Edge Detection'', IEEE Trans. Pattern Analysis and Machine Intelligence, 8(6):679–698, 1986.
 
== External links ==
*[http://www-sop.inria.fr/athena/Site/RachidDeriche Rachid Deriche personal page]
*[http://users.polytech.unice.fr/~lingrand/Ens/up/Lesson7and8-segmentation.pdf Diane Lingrand lecture about edge detectors]
*[http://www.cs.berkeley.edu/~jfc/ John Canny personal page]
 
[[Category:Feature detection]]

Latest revision as of 02:49, 8 December 2014

My name is Lillie (31 years old) and my hobbies are Taxidermy and Basket Weaving.

Have a look at my blog life insurance policy types