# cpc_3D.m

E. Koenig, 08/04/2010

Synthesis of a scale invariant 3D field using compound Poisson cascades [1].

The field is characterized by scale invariant exponents

prescribed by the distribution law of the values of random i.i.d. positive variables. This scale invariance is obtained in the range of scales between L and l where L is the largest scale of the field and l is the smallest one.

## Contents

- Reference
- Use
- Inputs
- Outputs
- Example

## Reference

`[1] Chainais, P.: Infinitely divisible cascades to model the statistics of natural images, IEEE Trans. on P.A.M.I. 29(12), 2105-2119 (2007)`

## Use

[Q seed_out] = cpc_3D(L_x, L_y, L_z, r_min, dx, law, param, pattern, angle, seed_in);

## Inputs

- L_x, L_y, L_z: largest scales of the cascade in each dimension
- r_min: smallest scale of the cascade
- dx: sampling rate, this is the same in every direction
- law: distribution law used to impose the desired scale invariance properties of the 3D field

            - 1: log-normal
            - 2: exponential
            - 3: log-Poisson

- param: law parameters
- pattern: pattern of the field

            - 1: cubes
            - 2: balls
            - 3: shaper square cosine
            - 4: shaper exponential

- angle: 1 - variable angle, 0 - fix angle
- seed_in: value of the initial seed used for the various random variables to draft

## Outputs

- Qr: 3D resulting field. The output is in 1 dimension, it needs a reshape using the `reshape` function of Matlab
- seed_out: last seed used by the random variable generator

## Example

Creation of a 64x64x64 scale invariant 3D field

    % Parameters
    X = 63;
    L_x = 4;
    L_y = 4;
    L_z = 4;
    r_min = 4/16;
    dx = 4/X;
    law = 2;
    param = [0.7 0 1];
    pattern = 2;
    angle = 0;
    seed_in = 0;

    % Computation of the 3D CPC
    [Q seed_out] = cpc_3D(L_x, L_y, L_z, r_min, dx, law, param, pattern, angle, seed_in);
    Q = reshape(Q, X+1, X+1, X+1);

    % Visualisation using Matlab
    [x y z] = meshgrid(1:size(Q,1), 1:size(Q,2), 1:size(Q,3));

    figure
    p=patch(isosurface(x, y, z, Q, mean(Q(:))));
    isonormals(x, y, z, Q, p);
    set(p,'FaceColor','red','EdgeColor','none');
    daspect([1,1,1]);
    view(3);
    axis tight
    camlight
    lighting phong