Nothing
# This is R source code for function 'stepEdgeParSelLLK' in
# the R package 'image'.
# Creator: Yicheng Kang
# Date: April 29, 2013
stepEdgeParSelLLK = function(image, bandwidth, thresh, nboot) {
if (!is.matrix(image))
stop("image data must be a matrix")
n1 = as.integer(dim(image)[1])
n2 = as.integer(dim(image)[2])
bandwidth = as.integer(bandwidth)
nboot = as.integer(nboot)
nband = length(bandwidth)
if (n1 != n2)
stop("image data must be a square matrix")
if (!is.numeric(bandwidth))
stop("bandwidth must be numeric")
if (min(bandwidth) < 1)
stop("bandwidth must be a positive integer")
if (n1 + 2 * max(bandwidth) + 2 > 600)
stop("some bandwidth is too large or the resolution
of the image is too high.")
if (!is.numeric(thresh))
stop("threshold must be numeric")
if ((!is.numeric(nboot)) | (length(nboot) > 1) |
(as.integer(nboot) < 1))
stop('nboot must be a positive integer.')
n = dim(image)[1]
z = matrix(as.double(image), ncol = n)
u = as.double(thresh)
nthresh = length(u)
out.mat = array(0, c(nband, nthresh))
jp.llk = JPLLK_surface(z, 2:7)
fitted = jp.llk$fitted
resid = jp.llk$resid
imgs.boot = array(0, c(n, n, nboot))
edge.boot = imgs.boot
for (iboot in 1:nboot) {
imgs.boot[ , , iboot] = fitted + matrix(sample(resid, n^2,
replace = TRUE), ncol = n)
}
for (iband in 1:nband) {
k = bandwidth[iband]
metric = array(0, c(nthresh, nboot))
foo.boot = function(iboot) {
diff.iboot = diffLLK(imgs.boot[ , , iboot], k)
return(diff.iboot)
}
diff = diffLLK(z, k)
diff.boot = array(sapply(1:nboot, foo.boot), c(n, n, nboot))
for (ithresh in 1:nthresh){
edge = array(as.integer(0), c(n, n))
edge[diff < u[ithresh]] = as.integer(0)
edge[diff >= u[ithresh]] = as.integer(1)
edge.boot[diff.boot < u[ithresh]] = as.integer(0)
edge.boot[diff.boot >= u[ithresh]] = as.integer(1)
foo.dKQ = function(iboot){
return(dKQ(edge, edge.boot[ , , iboot]))
}
metric[ithresh, ] = as.numeric(sapply(1:nboot, foo.dKQ))
}
dKQ.boot = apply(metric, 1, mean)
out.mat[iband, ] = dKQ.boot
}
rownames(out.mat) = paste('bandwidth=', bandwidth, sep='')
colnames(out.mat) = paste('thresh=', thresh, sep='')
out.mat.min = min(out.mat)
for(iband in 1:nband){
for(ithresh in 1:nthresh){
if(out.mat[iband, ithresh] == out.mat.min){
band_sel = bandwidth[iband]
thresh_sel = thresh[ithresh]
}
}
}
paste('The selected bandwidth is', band_sel)
paste('The selected threshold is', thresh_sel)
return(list(output_matrix=out.mat, selected_bandwidth=band_sel, selected_threshold=thresh_sel))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.