Xmipp  v3.23.11-Nereus
Functions
morphology.cpp File Reference
#include "morphology.h"
#include "filters.h"
#include <vector>
Include dependency graph for morphology.cpp:

Go to the source code of this file.

Functions

void dilate2D_step (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count)
 
void erode2D_step (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count)
 
void dilate2D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void erode2D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void closing2D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void opening2D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void border (const MultidimArray< double > &img, MultidimArray< double > &border)
 
void simplify_border (const MultidimArray< double > &border, MultidimArray< double > &simplified_border)
 
void random_convex_hull (const MultidimArray< double > &img, MultidimArray< double > &hull, long N)
 
void dilate3D_step (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count)
 
void erode3D_step (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count)
 
void dilate3D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void erode3D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void closing3D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void opening3D (const MultidimArray< double > &in, MultidimArray< double > &out, int neig, int count, int size)
 
void dilate3D (const MultidimArray< double > &in, const MultidimArray< double > &structuringElement, MultidimArray< double > &out)
 
void erode3D (const MultidimArray< double > &in, const MultidimArray< double > &structuringElement, MultidimArray< double > &out)
 
void sharpening (const MultidimArray< double > &in, double width, double strength, MultidimArray< double > &out)
 

Function Documentation

◆ dilate2D_step()

void dilate2D_step ( const MultidimArray< double > &  in,
MultidimArray< double > &  out,
int  neig,
int  count 
)

Definition at line 32 of file morphology.cpp.

34 {
35  double sum = 0;
36  double dcount=count;
37  for (int i = STARTINGY(in) + 1;i < FINISHINGY(in); i++)
38  for (int j = STARTINGX(in) + 1;j < FINISHINGX(in); j++)
39  {
40  if (A2D_ELEM(in,i, j) == 0)
41  {
42  // 4-environment
43  A2D_ELEM(out, i, j) = 0;
44  sum = A2D_ELEM(in,i - 1, j) + A2D_ELEM(in,i + 1, j) +
45  A2D_ELEM(in,i, j - 1) + A2D_ELEM(in,i, j + 1);
46  if (sum > dcount)
47  { //change the value to foreground
48  A2D_ELEM(out, i, j) = 1;
49  }
50  else if (neig == 8)
51  { //8-environment
52  sum +=A2D_ELEM(in,i - 1, j - 1) + A2D_ELEM(in,i - 1, j + 1) +
53  A2D_ELEM(in,i + 1, j - 1) + A2D_ELEM(in,i + 1, j + 1);
54  if (sum > dcount)
55  { //change the value to foreground
56  A2D_ELEM(out, i, j) = 1;
57  }
58  }
59  }
60  else
61  {
62  A2D_ELEM(out, i, j) = A2D_ELEM(in,i, j);
63  }
64  }
65 }
#define A2D_ELEM(v, i, j)
#define FINISHINGX(v)
#define STARTINGX(v)
#define i
#define STARTINGY(v)
#define j
#define FINISHINGY(v)

◆ dilate3D_step()

void dilate3D_step ( const MultidimArray< double > &  in,
MultidimArray< double > &  out,
int  neig,
int  count 
)

Definition at line 290 of file morphology.cpp.

292 {
293  int sum = 0;
294  for (int k = STARTINGZ(in) + 1;k < FINISHINGZ(in); k++)
295  for (int i = STARTINGY(in) + 1;i < FINISHINGY(in); i++)
296  for (int j = STARTINGX(in) + 1;j < FINISHINGX(in); j++)
297  {
298  if (A3D_ELEM(in,k, i, j) == 0)
299  {
300  // 6-environment
301  A3D_ELEM(out,k, i, j) = 0;
302  sum = (int)(A3D_ELEM(in,k - 1, i, j) + A3D_ELEM(in,k + 1, i, j) +
303  A3D_ELEM(in,k, i - 1, j) + A3D_ELEM(in,k, i + 1, j)
304  + A3D_ELEM(in,k, i, j - 1) + A3D_ELEM(in,k, i, j + 1));
305  if (sum > count)
306  { //change the value to foreground
307  A3D_ELEM(out,k, i, j) = 1;
308  }
309  else if (neig == 18)
310  { //18-environment
311  sum = (int)(sum + A3D_ELEM(in,k - 1, i, j - 1) + A3D_ELEM(in,k - 1, i, j + 1) + A3D_ELEM(in,k + 1, i, j - 1) + A3D_ELEM(in,k + 1, i, j + 1) +
312  A3D_ELEM(in,k, i + 1, j + 1) + A3D_ELEM(in,k, i + 1, j - 1) + A3D_ELEM(in,k, i - 1, j + 1) + A3D_ELEM(in,k, i - 1, j - 1) +
313  A3D_ELEM(in,k - 1, i + 1, j) + A3D_ELEM(in,k - 1, i - 1, j) + A3D_ELEM(in,k + 1, i + 1, j) + A3D_ELEM(in,k + 1, i - 1, j));
314  if (sum > count)
315  { //change the value to foreground
316  A3D_ELEM(out,k, i, j) = 1;
317  }
318  }
319  else if (neig == 26)
320  { //26-environment
321  sum = (int)(sum + A3D_ELEM(in,k - 1, i + 1, j + 1) + A3D_ELEM(in,k - 1, i + 1, j - 1) +
322  A3D_ELEM(in,k - 1, i - 1, j + 1) + A3D_ELEM(in,k - 1, i - 1, j - 1) +
323  A3D_ELEM(in,k + 1, i + 1, j + 1) + A3D_ELEM(in,k + 1, i + 1, j - 1) +
324  A3D_ELEM(in,k + 1, i - 1, j + 1) + A3D_ELEM(in,k + 1, i - 1, j - 1));
325  if (sum > count)
326  { //change the value to foreground
327  A3D_ELEM(out,k, i, j) = 1;
328  }
329  }
330 
331  }
332  else
333  {
334  A3D_ELEM(out,k, i, j) = A3D_ELEM(in,k, i, j);
335  }
336  }
337 }
#define FINISHINGX(v)
#define FINISHINGZ(v)
#define STARTINGX(v)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
#define j
#define FINISHINGY(v)
#define STARTINGZ(v)

◆ erode2D_step()

void erode2D_step ( const MultidimArray< double > &  in,
MultidimArray< double > &  out,
int  neig,
int  count 
)

Definition at line 67 of file morphology.cpp.

69 {
70  double dcount=count;
71  double sum;
72  for (int i = STARTINGY(in) + 1;i < FINISHINGY(in); i++)
73  for (int j = STARTINGX(in) + 1;j < FINISHINGX(in); j++)
74  {
75  if (A2D_ELEM(in, i, j) == 1)
76  {
77  // 4-environment
78  A2D_ELEM(out,i, j) = 1;
79  sum = A2D_ELEM(in,i - 1, j) + A2D_ELEM(in,i + 1, j) +
80  A2D_ELEM(in, i, j - 1) + A2D_ELEM(in, i, j + 1);
81  if ((4 - sum) > dcount)
82  { //change the value to background
83  A2D_ELEM(out, i, j) = 0;
84  }
85  else if (neig == 8)
86  { //8-environment
87  sum += A2D_ELEM(in, i - 1, j - 1) + A2D_ELEM(in, i - 1, j + 1) +
88  A2D_ELEM(in, i + 1, j - 1) + A2D_ELEM(in, i + 1, j + 1);
89  if ((neig - sum) > dcount)
90  { //change the value to background
91  A2D_ELEM(out,i, j) = 0;
92  }
93  }
94  }
95  else
96  {
97  A2D_ELEM(out, i, j) = A2D_ELEM(in, i, j);
98  }
99  }
100 }
#define A2D_ELEM(v, i, j)
#define FINISHINGX(v)
#define STARTINGX(v)
#define i
#define STARTINGY(v)
#define j
#define FINISHINGY(v)

◆ erode3D_step()

void erode3D_step ( const MultidimArray< double > &  in,
MultidimArray< double > &  out,
int  neig,
int  count 
)

Definition at line 339 of file morphology.cpp.

341 {
342  int sum = 0;
343  for (int k = STARTINGZ(in) + 1;k < FINISHINGZ(in); k++)
344  for (int i = STARTINGY(in) + 1;i < FINISHINGY(in); i++)
345  for (int j = STARTINGX(in) + 1;j < FINISHINGX(in); j++)
346  {
347  if (A3D_ELEM(in,k, i, j) == 1)
348  {
349  // 6-environment
350  A3D_ELEM(out,k, i, j) = 1;
351 
352  sum = (int)(A3D_ELEM(in,k - 1, i, j) + A3D_ELEM(in,k + 1, i, j) + A3D_ELEM(in,k, i - 1, j) + A3D_ELEM(in,k, i + 1, j)
353  + A3D_ELEM(in,k, i, j - 1) + A3D_ELEM(in,k, i, j + 1));
354  if ((6 - sum) > count)
355  { //change the value to background
356  A3D_ELEM(out,k, i, j) = 0;
357  }
358  else if (neig == 18)
359  { //18-environment
360  sum = (int)(sum + A3D_ELEM(in,k - 1, i, j - 1) + A3D_ELEM(in,k - 1, i, j + 1) + A3D_ELEM(in,k + 1, i, j - 1) + A3D_ELEM(in,k + 1, i, j + 1) +
361  A3D_ELEM(in,k, i + 1, j + 1) + A3D_ELEM(in,k, i + 1, j - 1) + A3D_ELEM(in,k, i - 1, j + 1) + A3D_ELEM(in,k, i - 1, j - 1) +
362  A3D_ELEM(in,k - 1, i + 1, j) + A3D_ELEM(in,k - 1, i - 1, j) + A3D_ELEM(in,k + 1, i + 1, j) + A3D_ELEM(in,k + 1, i - 1, j));
363  if ((neig - sum) > count)
364  { //change the value to background
365  A3D_ELEM(out,k, i, j) = 0;
366  }
367  }
368  else if (neig == 26)
369  { //26-environment
370  sum = (int)(sum + A3D_ELEM(in,k - 1, i, j - 1) + A3D_ELEM(in,k - 1, i, j + 1) + A3D_ELEM(in,k + 1, i, j - 1) + A3D_ELEM(in,k + 1, i, j + 1) +
371  A3D_ELEM(in,k, i + 1, j + 1) + A3D_ELEM(in,k, i + 1, j - 1) + A3D_ELEM(in,k, i - 1, j + 1) + A3D_ELEM(in,k, i - 1, j - 1) +
372  A3D_ELEM(in,k - 1, i + 1, j) + A3D_ELEM(in,k - 1, i - 1, j) + A3D_ELEM(in,k + 1, i + 1, j) + A3D_ELEM(in,k + 1, i - 1, j) +
373  A3D_ELEM(in,k - 1, i + 1, j + 1) + A3D_ELEM(in,k - 1, i + 1, j - 1) +
374  A3D_ELEM(in,k - 1, i - 1, j + 1) + A3D_ELEM(in,k - 1, i - 1, j - 1) +
375  A3D_ELEM(in,k + 1, i + 1, j + 1) + A3D_ELEM(in,k + 1, i + 1, j - 1) +
376  A3D_ELEM(in,k + 1, i - 1, j + 1) + A3D_ELEM(in,k + 1, i - 1, j - 1));
377 
378  if ((neig - sum) > count)
379  { //change the value to background
380  A3D_ELEM(out,k, i, j) = 0;
381  }
382  }
383 
384  }
385  else
386  {
387  A3D_ELEM(out,k, i, j) = A3D_ELEM(in,k, i, j);
388  }
389  }
390 
391 }
#define FINISHINGX(v)
#define FINISHINGZ(v)
#define STARTINGX(v)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define STARTINGY(v)
#define A3D_ELEM(V, k, i, j)
#define j
#define FINISHINGY(v)
#define STARTINGZ(v)