summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Core/regularizers_CPU/PatchBased_Regul_core.c34
1 files changed, 6 insertions, 28 deletions
diff --git a/Core/regularizers_CPU/PatchBased_Regul_core.c b/Core/regularizers_CPU/PatchBased_Regul_core.c
index 5ceb5e2..d83cb76 100644
--- a/Core/regularizers_CPU/PatchBased_Regul_core.c
+++ b/Core/regularizers_CPU/PatchBased_Regul_core.c
@@ -18,7 +18,7 @@ limitations under the License.
*/
#include "PatchBased_Regul_core.h"
-#include <string.h>
+
/* C-OMP implementation of patch-based (PB) regularization (2D and 3D cases).
* This method finds self-similar patches in data and performs one fixed point iteration to mimimize the PB penalty function
*
@@ -46,28 +46,11 @@ limitations under the License.
*/
/*2D version function */
-float PB_FUNC2D(float *Ap, float *Bp, int dimX, int dimY, int padXY, int SearchW, int SimilW, float h, float lambda)
+float PB_FUNC2D(float *A, float *B, int dimX, int dimY, int padXY, int SearchW, int SimilW, float h, float lambda)
{
int i, j, i_n, j_n, i_m, j_m, i_p, j_p, i_l, j_l, i1, j1, i2, j2, i3, j3, i5,j5, count, SimilW_full;
float *Eucl_Vec, h2, denh2, normsum, Weight, Weight_norm, value, denom, WeightGlob, t1;
-
- //float A[dimX*dimY], B[dimX*dimY];
- float *A , *B;
- A = (float*) calloc (dimX*dimY,sizeof(float));
- B = (float*) calloc (dimX*dimY,sizeof(float));
-
- //fill the structures
- int index=0;
- for (i=0;i<dimX;i++){
- for (j=0;j<dimY;j++){
- int index = j + dimX * i;
-
- float val = (*(Ap + index));
- memcpy(A + index , &val, sizeof(float));
- val = (*(Bp + index));
- memcpy(B + index , &val, sizeof(float));
- }
- }
+
/*SearchW_full = 2*SearchW + 1; */ /* the full searching window size */
SimilW_full = 2*SimilW + 1; /* the full similarity window size */
h2 = h*h;
@@ -82,12 +65,10 @@ float PB_FUNC2D(float *Ap, float *Bp, int dimX, int dimY, int padXY, int SearchW
Eucl_Vec[count] = exp(-(t1)/(2*SimilW*SimilW));
count = count + 1;
}} /*main neighb loop */
-
- #pragma acc kernels copy(A[0:dimX*dimY], B[0:dimX*dimY], Eucl_Vec[0:SimilW_full*SimilW_full])
- {
+
/*The NLM code starts here*/
/* setting OMP here */
- //#pragma omp parallel for shared (A, B, dimX, dimY, Eucl_Vec, lambda, denh2) private(denom, i, j, WeightGlob, count, i1, j1, i2, j2, i3, j3, i5, j5, Weight_norm, normsum, i_m, j_m, i_n, j_n, i_l, j_l, i_p, j_p, Weight, value)
+ #pragma omp parallel for shared (A, B, dimX, dimY, Eucl_Vec, lambda, denh2) private(denom, i, j, WeightGlob, count, i1, j1, i2, j2, i3, j3, i5, j5, Weight_norm, normsum, i_m, j_m, i_n, j_n, i_l, j_l, i_p, j_p, Weight, value)
for(i=0; i<dimX; i++) {
for(j=0; j<dimY; j++) {
@@ -120,8 +101,7 @@ float PB_FUNC2D(float *Ap, float *Bp, int dimX, int dimY, int padXY, int SearchW
WeightGlob += Weight;
}}
- value += A[i1*dimY+j1]
- * WeightGlob;
+ value += A[i1*dimY+j1]*WeightGlob;
Weight_norm += WeightGlob;
}} /*search window loop end*/
@@ -130,8 +110,6 @@ float PB_FUNC2D(float *Ap, float *Bp, int dimX, int dimY, int padXY, int SearchW
B[i*dimY+j] = (A[i*dimY+j] + lambda*value)/denom;
}
}} /*main loop*/
-
- } // OpenAcc pragma
return (*B);
free(Eucl_Vec);
}