TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcrec
mrprior.c
Go to the documentation of this file.
1
7
/*****************************************************************************/
8
#include "
libtpcrec.h
"
9
/*****************************************************************************/
10
11
/*****************************************************************************/
15
float
med9
(
17
float
*inp,
19
int
dim
20
) {
21
// xxx
22
// xXx
23
// xxx
24
float
w[9], *p;
25
int
n=0;
26
27
/* upper row */
28
p=inp-dim-1;
29
w[n]=*p++;
if
(isfinite(w[n])) n++;
30
w[n]=*p++;
if
(isfinite(w[n])) n++;
31
w[n]=*p;
if
(isfinite(w[n])) n++;
32
/* mid row */
33
p=inp-1;
34
w[n]=*p++;
if
(isfinite(w[n])) n++;
35
w[n]=*p++;
if
(isfinite(w[n])) n++;
36
w[n]=*p;
if
(isfinite(w[n])) n++;
37
/* lower row */
38
p=inp+dim-1;
39
w[n]=*p++;
if
(isfinite(w[n])) n++;
40
w[n]=*p++;
if
(isfinite(w[n])) n++;
41
w[n]=*p;
if
(isfinite(w[n])) n++;
42
/* Median */
43
return
(
fmedian
(w, n));
44
}
45
/*****************************************************************************/
49
float
med21
(
51
float
*inp,
53
int
dim
54
) {
55
// oxxxo
56
// xxxxx
57
// xxXxx
58
// xxxxx
59
// oxxxo
60
float
w[21], *p;
61
62
/* 1st row */
63
p=inp-2*dim-1; w[0]=*p++; w[1]=*p++; w[2]=*p;
64
/* 2nd row */
65
p=inp-dim-2; w[3]=*p++; w[4]=*p++; w[5]=*p++; w[6]=*p++; w[7]=*p;
66
/* 3rd row */
67
p=inp-2; w[8]=*p++; w[9]=*p++; w[10]=*p++; w[11]=*p++; w[12]=*p;
68
/* 4th row */
69
p=inp+dim-2; w[13]=*p++; w[14]=*p++; w[15]=*p++; w[16]=*p++; w[17]=*p;
70
/* 5th row */
71
p=inp+2*dim-1; w[18]=*p++; w[19]=*p++; w[20]=*p;
72
/* Median */
73
return
(
fmedian
(w, 21));
74
}
75
/*****************************************************************************/
77
void
do_prior
(
79
float
*img,
81
float
beta,
83
float
*med_coef,
85
int
dim,
87
float
small,
89
int
maskdim,
91
float
*maxm
92
) {
93
int
i, j;
94
float
*iptr, *mptr, med, f, mmax=0.0;
95
float
one_minus_beta=1.0-beta;
96
97
//printf("do_prior(%d, %d)\n", dim, maskdim); fflush(stdout);
98
for
(i=0; i<dim*dim; i++) med_coef[i]=0.0;
99
100
if
(maskdim==3) {
101
iptr=img+dim+1;
102
mptr=med_coef+dim+1;
103
for
(j=1; j<dim-1; j++) {
104
for
(i=1; i<dim-1; i++) {
105
if
(*iptr<=small) {
106
*mptr=0.0;
107
}
else
{
108
med=
med9
(iptr, dim);
109
if
(med==0.0) {
110
*mptr=0.0;
111
}
else
{
112
f=med/(beta*(*iptr) + one_minus_beta*med);
113
if
(f>1.0E-08) *mptr=f;
else
*mptr=0.0;
114
}
115
}
116
if
(*mptr>mmax) mmax=*mptr;
117
iptr++; mptr++;
118
}
119
iptr+=2; mptr+=2;
120
}
121
if
(maxm!=NULL) *maxm=mmax;
122
//printf("out from do_prior()\n"); fflush(stdout);
123
return
;
124
}
125
126
if
(maskdim==5) {
127
iptr=img+2*dim+2;
128
mptr=med_coef+2*dim+2;
129
for
(j=2; j<dim-2; j++) {
130
for
(i=2; i<dim-2; i++) {
131
if
(*iptr<=small) {
132
*mptr=0.0;
133
}
else
{
134
med=
med21
(iptr, dim);
135
if
(med==0.0) {
136
*mptr=0.0;
137
}
else
{
138
f=med/(beta*(*iptr) + one_minus_beta*med);
139
if
(f>1.0E-08) *mptr=f;
else
*mptr=0.0;
140
}
141
}
142
if
(*mptr>mmax) mmax=*mptr;
143
iptr++; mptr++;
144
}
145
iptr+=4; mptr+=4;
146
}
147
if
(maxm!=NULL) *maxm=mmax;
148
//printf("out from do_prior()\n"); fflush(stdout);
149
return
;
150
}
151
}
152
/*****************************************************************************/
153
154
/*****************************************************************************/
fmedian
float fmedian(float *data, long long int n)
Definition
imgminmax.c:593
libtpcrec.h
Header file for libtpcrec.
med21
float med21(float *inp, int dim)
Definition
mrprior.c:49
med9
float med9(float *inp, int dim)
Definition
mrprior.c:15
do_prior
void do_prior(float *img, float beta, float *med_coef, int dim, float small, int maskdim, float *maxm)
Definition
mrprior.c:77
Generated on
for TPCCLIB by
1.17.0