summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Core/regularizers_GPU/Diffus_HO/Diff4th_GPU_kernel.cu2
-rw-r--r--Wrappers/Python/src/gpu_regularizers.pyx38
-rw-r--r--Wrappers/Python/test/test_gpu_regularizers.py54
3 files changed, 49 insertions, 45 deletions
diff --git a/Core/regularizers_GPU/Diffus_HO/Diff4th_GPU_kernel.cu b/Core/regularizers_GPU/Diffus_HO/Diff4th_GPU_kernel.cu
index 90269bf..6cfba3a 100644
--- a/Core/regularizers_GPU/Diffus_HO/Diff4th_GPU_kernel.cu
+++ b/Core/regularizers_GPU/Diffus_HO/Diff4th_GPU_kernel.cu
@@ -267,4 +267,4 @@ extern "C" void Diff4th_GPU_kernel(float* A, float* B, int N, int M, int Z, floa
checkCudaErrors(cudaMemcpy(B,Bd,N*M*Z*sizeof(float),cudaMemcpyDeviceToHost));
cudaFree(Ad); cudaFree(Bd); cudaFree(Cd);
}
-} \ No newline at end of file
+}
diff --git a/Wrappers/Python/src/gpu_regularizers.pyx b/Wrappers/Python/src/gpu_regularizers.pyx
index dc625c3..84fc30a 100644
--- a/Wrappers/Python/src/gpu_regularizers.pyx
+++ b/Wrappers/Python/src/gpu_regularizers.pyx
@@ -31,19 +31,22 @@ cdef extern float pad_crop(float *A, float *Ap,
int padXY, int switchpad_crop);
def Diff4thHajiaboli(inputData,
- regularization_parameter,
+ edge_preserv_parameter,
iterations,
- edge_preserving_parameter):
+ time_marching_parameter,
+ regularization_parameter):
if inputData.ndim == 2:
return Diff4thHajiaboli2D(inputData,
- regularization_parameter,
+ edge_preserv_parameter,
iterations,
- edge_preserving_parameter)
+ time_marching_parameter,
+ regularization_parameter)
elif inputData.ndim == 3:
return Diff4thHajiaboli3D(inputData,
- regularization_parameter,
+ edge_preserv_parameter,
iterations,
- edge_preserving_parameter)
+ time_marching_parameter,
+ regularization_parameter)
def NML(inputData,
SearchW_real,
@@ -64,9 +67,10 @@ def NML(inputData,
lambdaf)
def Diff4thHajiaboli2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData,
- float regularization_parameter,
+ float edge_preserv_parameter,
int iterations,
- float edge_preserving_parameter):
+ float time_marching_parameter,
+ float regularization_parameter):
cdef long dims[2]
dims[0] = inputData.shape[0]
@@ -74,9 +78,6 @@ def Diff4thHajiaboli2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData,
N = dims[0] + 2;
M = dims[1] + 2;
- #time step is sufficiently small for an explicit methods
- tau = 0.01
-
#A_L = (float*)mxGetData(mxCreateNumericMatrix(N, M, mxSINGLE_CLASS, mxREAL));
#B_L = (float*)mxGetData(mxCreateNumericMatrix(N, M, mxSINGLE_CLASS, mxREAL));
cdef np.ndarray[np.float32_t, ndim=2, mode="c"] A_L = \
@@ -102,9 +103,9 @@ def Diff4thHajiaboli2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData,
#<float*> A_L.data, <float*> B_L.data,
&A_L[0,0], &B_L[0,0],
N, M, 0,
- edge_preserving_parameter,
+ edge_preserv_parameter,
iterations ,
- tau,
+ time_marching_parameter,
regularization_parameter);
# copy the processed B_L to a smaller B
for i in range(N):
@@ -120,9 +121,10 @@ def Diff4thHajiaboli2D(np.ndarray[np.float32_t, ndim=2, mode="c"] inputData,
return B
def Diff4thHajiaboli3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData,
- float regularization_parameter,
+ float edge_preserv_parameter,
int iterations,
- float edge_preserving_parameter):
+ float time_marching_parameter,
+ float regularization_parameter):
cdef long dims[3]
dims[0] = inputData.shape[0]
@@ -132,8 +134,6 @@ def Diff4thHajiaboli3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData,
M = dims[1] + 2
Z = dims[2] + 2
- # Time Step is small for an explicit methods
- tau = 0.0007;
#A_L = (float*)mxGetData(mxCreateNumericMatrix(N, M, mxSINGLE_CLASS, mxREAL));
#B_L = (float*)mxGetData(mxCreateNumericMatrix(N, M, mxSINGLE_CLASS, mxREAL));
@@ -162,9 +162,9 @@ def Diff4thHajiaboli3D(np.ndarray[np.float32_t, ndim=3, mode="c"] inputData,
#<float*> A_L.data, <float*> B_L.data,
&A_L[0,0,0], &B_L[0,0,0],
N, M, Z,
- edge_preserving_parameter,
+ edge_preserv_parameter,
iterations ,
- tau,
+ time_marching_parameter,
regularization_parameter);
# copy the processed B_L to a smaller B
for i in range(N):
diff --git a/Wrappers/Python/test/test_gpu_regularizers.py b/Wrappers/Python/test/test_gpu_regularizers.py
index 18fbdd3..735a25d 100644
--- a/Wrappers/Python/test/test_gpu_regularizers.py
+++ b/Wrappers/Python/test/test_gpu_regularizers.py
@@ -40,7 +40,8 @@ filename = os.path.join(".." , ".." , ".." , "data" ,"lena_gray_512.tif")
Im = plt.imread(filename)
Im = np.asarray(Im, dtype='float32')
-perc = 0.15
+Im = Im/255
+perc = 0.075
u0 = Im + np.random.normal(loc = Im ,
scale = perc * Im ,
size = np.shape(Im))
@@ -53,49 +54,52 @@ fig = plt.figure()
a=fig.add_subplot(2,3,1)
a.set_title('noise')
-imgplot = plt.imshow(u0#,cmap="gray"
- )
+imgplot = plt.imshow(u0,cmap="gray")
## Diff4thHajiaboli
start_time = timeit.default_timer()
pars = {'algorithm' : Diff4thHajiaboli , \
'input' : u0,
- 'regularization_parameter':0.02 , \
-'number_of_iterations' :150 ,\
-'edge_preserving_parameter':0.001
+ 'edge_preserv_parameter':0.1 , \
+'number_of_iterations' :250 ,\
+'time_marching_parameter':0.03 ,\
+'regularization_parameter':0.7
}
+
+
d4h = Diff4thHajiaboli(pars['input'],
- pars['regularization_parameter'],
+ pars['edge_preserv_parameter'],
pars['number_of_iterations'],
- pars['edge_preserving_parameter'])
+ pars['time_marching_parameter'],
+ pars['regularization_parameter'])
+rms = rmse(Im, d4h)
+pars['rmse'] = rms
txtstr = printParametersToString(pars)
txtstr += "%s = %.3fs" % ('elapsed time',timeit.default_timer() - start_time)
print (txtstr)
a=fig.add_subplot(2,3,2)
# these are matplotlib.patch.Patch properties
-props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
+props = dict(boxstyle='round', facecolor='wheat', alpha=0.75)
# place a text box in upper left in axes coords
-a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14,
+a.text(0.15, 0.25, txtstr, transform=a.transAxes, fontsize=12,
verticalalignment='top', bbox=props)
-imgplot = plt.imshow(d4h #, cmap="gray"
- )
+imgplot = plt.imshow(d4h, cmap="gray")
a=fig.add_subplot(2,3,5)
# these are matplotlib.patch.Patch properties
props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
# place a text box in upper left in axes coords
-a.text(0.05, 0.95, 'd4h - u0', transform=a.transAxes, fontsize=14,
+a.text(0.05, 0.95, 'd4h - u0', transform=a.transAxes, fontsize=12,
verticalalignment='top', bbox=props)
-imgplot = plt.imshow(d4h - u0 #, cmap="gray"
- )
+imgplot = plt.imshow((d4h - u0)**2, cmap="gray")
## Patch Based Regul NML
start_time = timeit.default_timer()
-
+"""
pars = {'algorithm' : NML , \
'input' : u0,
'SearchW_real':3 , \
@@ -103,13 +107,15 @@ pars = {'algorithm' : NML , \
'h':0.05 ,#
'lambda' : 0.08
}
+"""
pars = {
'input' : u0,
- 'regularization_parameter': 0.05,\
+ 'regularization_parameter': 0.01,\
'searching_window_ratio':3, \
'similarity_window_ratio':1,\
- 'PB_filtering_parameter': 0.06
+ 'PB_filtering_parameter': 0.2
}
+
nml = NML(pars['input'],
pars['searching_window_ratio'],
pars['similarity_window_ratio'],
@@ -123,12 +129,11 @@ print (txtstr)
a=fig.add_subplot(2,3,3)
# these are matplotlib.patch.Patch properties
-props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
+props = dict(boxstyle='round', facecolor='wheat', alpha=0.75)
# place a text box in upper left in axes coords
-a.text(0.05, 0.95, txtstr, transform=a.transAxes, fontsize=14,
+a.text(0.15, 0.25, txtstr, transform=a.transAxes, fontsize=12,
verticalalignment='top', bbox=props)
-imgplot = plt.imshow(nml #, cmap="gray"
- )
+imgplot = plt.imshow(nml, cmap="gray")
a=fig.add_subplot(2,3,6)
@@ -137,8 +142,7 @@ props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
# place a text box in upper left in axes coords
a.text(0.05, 0.95, 'nml - u0', transform=a.transAxes, fontsize=14,
verticalalignment='top', bbox=props)
-imgplot = plt.imshow(nml - u0 #, cmap="gray"
- )
+imgplot = plt.imshow((nml - u0)**2, cmap="gray")
plt.show()
- \ No newline at end of file
+