Barycenter of Images according to Benamou et al. (2015)
imagebary15B.RdUsing entropic regularization for Wasserstein barycenter computation, imagebary15B
finds a barycentric image \(X^*\) given multiple images \(X_1,X_2,\ldots,X_N\).
Please note the followings; (1) we only take a matrix as an image so please
make it grayscale if not, (2) all images should be of same size - no resizing is performed.
Arguments
- images
a length-\(N\) list of same-size image matrices of size \((m\times n)\).
- p
an exponent for the order of the distance (default: 2).
- weights
a weight of each image; if
NULL(default), uniform weight is set. Otherwise, it should be a length-\(N\) vector of nonnegative weights.- lambda
a regularization parameter; if
NULL(default), a paper's suggestion would be taken, or it should be a strictly positive real number.- ...
extra parameters including
- abstol
stopping criterion for iterations (default: 1e-8).
- init.image
an initial weight image (default: uniform weight).
- maxiter
maximum number of iterations (default: 496).
- nthread
compatibility control; only 1 is supported.
- print.progress
a logical to show final solver diagnostics (default:
FALSE).
Value
A matrix of image probability masses with a diagnostics
attribute; return_result = TRUE returns a rich fit and image.
Details
Since version 0.2.0 the historical names call the shared
objective-checked mirror-descent solver with log-domain Sinkhorn gradients,
as documented in fbary14C. The entropy coefficient
lambda multiplies sum(plan * (log(plan) - 1)).
Pixel columns run from x=0 to x=1 and rows from y=1 to y=0; a singleton
axis is fixed at its first coordinate. Pixel intensities are probability
masses after normalization. Additional controls from fbary14C
are accepted, using init.image instead of init.vec.
References
Benamou J, Carlier G, Cuturi M, Nenna L, Peyré G (2015). “Iterative Bregman Projections for Regularized Transportation Problems.” SIAM Journal on Scientific Computing, 37(2), A1111-A1138. ISSN 1064-8275, 1095-7197, doi:10.1137/141000439 .
Examples
#----------------------------------------------------------------------
# MNIST Data with Digit 3
#
# EXAMPLE 1 : Very Small Example for CRAN; just showing how to use it!
# EXAMPLE 2 : Medium-size Example for Evolution of Output
#----------------------------------------------------------------------
# EXAMPLE 1
datsmall = list(matrix(c(1, 0, 0, 1), 2, 2))
outsmall = imagebary15B(datsmall, lambda=0.5, maxiter=3)
attr(outsmall, 'diagnostics')$status
#> [1] "success"
if (FALSE) { # \dontrun{
# EXAMPLE 2 : Barycenter of 100 Images
# RANDOMLY SELECT THE IMAGES
data(digit3)
dat2 = digit3[sample(1:2000, 100)] # select 100 images
# RUN SEQUENTIALLY
run05 = imagebary15B(dat2, maxiter=5) # first 5 iterations
run10 = imagebary15B(dat2, maxiter=5, init.image=run05) # run 5 more
run50 = imagebary15B(dat2, maxiter=40, init.image=run10) # run 40 more
# VISUALIZE
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,3), pty="s")
image(dat2[[sample(100,1)]], axes=FALSE, main="a random image")
image(dat2[[sample(100,1)]], axes=FALSE, main="a random image")
image(dat2[[sample(100,1)]], axes=FALSE, main="a random image")
image(run05, axes=FALSE, main="barycenter after 05 iter")
image(run10, axes=FALSE, main="barycenter after 10 iter")
image(run50, axes=FALSE, main="barycenter after 50 iter")
par(opar)
} # }