roofEdge {DRIP} | R Documentation |
Edge detection, denoising and deblurring
Description
Detect roof/valley edges in an image using piecewise local linear kernel smoothing.
Usage
roofEdge(image, bandwidth, thresh, edge1, blur, plot)
Arguments
image |
A square matrix object of size n by n, no missing value allowed. |
bandwidth |
A positive integer to specify the number of pixels used in the local smoothing. |
thresh |
Threshold value used in the edge detection criterion. |
edge1 |
Step edges. The function excludes step edges when detects roof/valley edges. |
blur |
If blur = TRUE, besides the conventional 2-D kernel function, a univariate kernel function is used in the local smoothing to address the issue of blur. |
plot |
If plot = TRUE, an image of detected edges is plotted. |
Details
At each pixel, the second-order derivarives (i.e., f''_{xx}
,
f''_{xy}
, and f''_{yy}
) are estimated by
a local quadratic kernel smoothing procedure. Next, the local
neighborhood is first divided into two halves along the direction
perpendicular to (\widehat{f}''_{xx}
, \widehat{f}''_{xy}
). Then the
one-sided estimates of f'_{x+}
and f'_{x-}
are obtained
respectively by local linear kernel smoothing. The estimates of
f'_{y+}
and f'_{y-}
are obtained by the same procedure
except that the neighborhood is divided along the direction
(\widehat{f}''_{xy}
, \widehat{f}''_{yy}
). The pixel is
flagged as a roof/valley edge pixel if max(|\widehat{f}_{x+} - \widehat{f}_{x-}|,
|\widehat{f}_{y+} - \widehat{f}_{y-}|)>
the specified thresh and there is
no step edge pixels in the neighborhood.
Value
Returns a matrix of zeros and ones of the same size as image.
References
Qiu, P., and Kang, Y. "Blind Image Deblurring Using Jump Regression Analysis," Statistica Sinica, 25, 2015, 879-899.
See Also
Examples
data(peppers)
# Not run
#step.edges <- stepEdgeLLK(peppers, bandwidth=6, thresh=25, plot=FALSE)
#roof.edges <- roofEdge(image=peppers, bandwidth=9, thresh=3000, edge1=step.edges,
# blur=FALSE, plot=FALSE) # Time consuming
#edges = step.edges + roof.edges
#par(mfrow=c(2,2))
#image(1-step.edges, col=gray(0:1))
#image(1-roof.edges, col=gray(0:1))
#image(1-edges, col=gray(0:1))
#image(peppers, col=gray(c(0:255)/255))