cunique

Below is a demonstration of the features of the cunique function

Contents

```clear; close all; clc;
```

Syntax

[A_uni,ind1,ind2,Ac]=cunique(A);

Description

The imx function provides a figure window based GUI for 3D image segmentation

Examples

Plot settings

```fontSize=20;
```

Example 1: Getting unique entries and occurance counts for 1xN arrays

```n=15;
A=round(25*rand(1,n)); %Rounded random set in range 0-25
A(1)=A(end); %Force at least one double occurance for this example
A

%Get unique set and counts
[A_uni,ind1,ind2,Ac]=cunique(A)
```
```A =

Columns 1 through 13

12    17    12     2     2    14     1    11    21    19     7    22    12

Columns 14 through 15

17    12

A_uni =

1     2     7    11    12    14    17    19    21    22

ind1 =

7     4    11     8     1     6     2    10     9    12

ind2 =

Columns 1 through 13

5     7     5     2     2     6     1     4     9     8     3    10     5

Columns 14 through 15

7     5

Ac =

Columns 1 through 13

4     2     4     2     2     1     1     1     1     1     1     1     4

Columns 14 through 15

2     4

```

Example 2: Getting unique entries and occurance counts for NxM arrays

```n=5;
m=6;
A=round(25*rand(n,m)); %Rounded random set in range 0-25
A(1)=A(end); %Force at least one double occurance for this example
A

%Get unique set and counts
[A_uni,ind1,ind2,Ac]=cunique(A)
```
```A =

23    12    24     8    23    22
2    11    22     8    20    20
13     3    25     3    10    13
22     7     0     1     3    23
14     4     4    18    22    23

A_uni =

0
1
2
3
4
7
8
10
11
12
13
14
18
20
22
23
24
25

ind1 =

14
19
2
8
10
9
16
23
7
6
3
5
20
22
4
1
11
13

ind2 =

16    10    17     7    16    15
3     9    15     7    14    14
11     4    18     4     8    11
15     6     1     2     4    16
12     5     5    13    15    16

Ac =

4     1     1     2     4     4
1     1     4     2     2     2
2     3     1     3     1     2
4     1     1     1     3     4
1     2     2     1     4     4

```

Visualizing input array and occurange counts

```cFigure;
subplot(1,2,1);
title('The input array')
hold on;
imagesc(A);
image_numeric(A,[],0,fontSize);
axis tight; axis equal;
colormap(gca,gjet(max(A(:))));
icolorbar;

subplot(1,2,2);
title('The occurance counts')
hold on;
imagesc(Ac);
image_numeric(Ac,[],0,fontSize);
axis tight; axis equal;
colormap(gca,gjet(max(Ac(:))));
icolorbar;
drawnow;
```

Example 3: Getting unique entries and occurance counts for NxMx... arrays

```n=3;
m=4;
l=2;

A=round(25*rand(n,m,l)); %Rounded random set in range 0-25
A(1)=A(end); %Force at least one double occurance for this example
A

%Get unique set and counts
[A_uni,ind1,ind2,Ac]=cunique(A)
```
```A(:,:,1) =

22     3    19    15
20     3     1     7
3    12    17    22

A(:,:,2) =

12     1    17     5
3     2     9     8
3    12     9    22

A_uni =

1
2
3
5
7
8
9
12
15
17
19
20
22

ind1 =

8
17
3
22
11
23
20
6
10
9
7
2
1

ind2(:,:,1) =

13     3    11     9
12     3     1     5
3     8    10    13

ind2(:,:,2) =

8     1    10     4
3     2     7     6
3     8     7    13

Ac(:,:,1) =

3     5     1     1
1     5     2     1
5     3     2     3

Ac(:,:,2) =

3     2     2     1
5     1     2     1
5     3     2     3

```

Example 4: Using 'rows' option

```n=5;
m=3;

A=round(25*rand(n,m)); %Rounded random set in range 0-25
A(1,:)=A(end,:); %Force at least one double row for this example
A

%Get unique set and counts
[A_uni,ind1,ind2,Ac]=cunique(A,'rows')
```
```A =

13    25    21
21     4    20
12     0    20
14    11    18
13    25    21

A_uni =

12     0    20
13    25    21
14    11    18
21     4    20

ind1 =

3
1
4
2

ind2 =

2
4
1
3
2

Ac =

2
1
1
1
2

```

GIBBON www.gibboncode.org

Kevin Mattheus Moerman, gibbon.toolbox@gmail.com

GIBBON footer text

GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.

Copyright (C) 2019 Kevin Mattheus Moerman

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.