From efba964dde645619aaacf7e8efcbe4044dda44c5 Mon Sep 17 00:00:00 2001 From: Ankit Agrawal Date: Wed, 31 Jul 2013 05:34:03 +0530 Subject: [PATCH] Fixing many bugs; Working Censure for mode=Octagon --- skimage/feature/censure.py | 16 +++++++--------- skimage/feature/censure_cy.pyx | 24 ++++++++++-------------- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/skimage/feature/censure.py b/skimage/feature/censure.py index 36f57836..9997ad50 100644 --- a/skimage/feature/censure.py +++ b/skimage/feature/censure.py @@ -28,13 +28,12 @@ def _get_filtered_image(image, no_of_scales, mode): scales = np.zeros((image.shape[0], image.shape[1], no_of_scales)) integral_img = integral_image(image) integral_img1 = _slanted_integral_image_modes(image, 1) - print '8' integral_img2 = _slanted_integral_image_modes(image, 2) - print '9' + integral_img2 = np.ascontiguousarray(integral_img2) integral_img3 = _slanted_integral_image_modes(image, 3) - print '10' + integral_img3 = np.ascontiguousarray(integral_img3) integral_img4 = _slanted_integral_image_modes(image, 4) - print '11' + integral_img4 = np.ascontiguousarray(integral_img4) for k in range(no_of_scales): n = k + 1 filtered_image = np.zeros(image.shape) @@ -58,16 +57,15 @@ def _slanted_integral_image_modes(img, mode=1): image = np.copy(img, order='C') mode1 = np.zeros((image.shape[0] + 1, image.shape[1]), order='C') _slanted_integral_image(image, mode1) - print '7' return mode1[1:, :] elif mode == 2: image = np.copy(img, order='C') image = np.fliplr(image) image = np.flipud(image) + image = np.ascontiguousarray(image) mode2 = np.zeros((image.shape[0] + 1, image.shape[1]), order='C') _slanted_integral_image(image, mode2) - print '7' mode2 = mode2[1:, :] mode2 = np.fliplr(mode2) mode2 = np.flipud(mode2) @@ -77,9 +75,9 @@ def _slanted_integral_image_modes(img, mode=1): image = np.copy(img, order='C') image = np.flipud(image) image = image.T + image = np.ascontiguousarray(image) mode3 = np.zeros((image.shape[0] + 1, image.shape[1]), order='C') _slanted_integral_image(image, mode3) - print '7' mode3 = mode3[1:, :] mode3 = np.flipud(mode3.T) return mode3 @@ -88,9 +86,9 @@ def _slanted_integral_image_modes(img, mode=1): image = np.copy(img, order='C') image = np.fliplr(image) image = image.T + image = np.ascontiguousarray(image) mode4 = np.zeros((image.shape[0] + 1, image.shape[1]), order='C') _slanted_integral_image(image, mode4) - print '7' mode4 = mode4[1:, :] mode4 = np.fliplr(mode4.T) return mode4 @@ -176,5 +174,5 @@ def censure_keypoints(image, no_of_scales=7, mode='DoB', threshold=0.03, rpc_thr response[:, :, i] = _suppress_line(response[:, :, i], (1 + i / 3.0), rpc_threshold) # Returning keypoints with its scale - keypoints = np.transpose(np.nonzero(response[:, :, 1:no_of_scales])) + [0, 0, 1] + keypoints = np.transpose(np.nonzero(response[:, :, 1:no_of_scales - 1])) + [0, 0, 2] return keypoints diff --git a/skimage/feature/censure_cy.pyx b/skimage/feature/censure_cy.pyx index d8cc80b5..29c91378 100644 --- a/skimage/feature/censure_cy.pyx +++ b/skimage/feature/censure_cy.pyx @@ -37,21 +37,18 @@ def _slanted_integral_image(double[:, ::1] image, right_sum_np = np.sum(image, 1).cumsum(0) - print '1' for i in range(image.shape[0]): image[i, 0] = left_sum_np[i] image[i, -1] = right_sum_np[i] - print '2' for i in range(1, integral_img.shape[0]): for j in range(integral_img.shape[1]): integral_img[i, j] = image[i - 1, j] - print '3' for i in range(1, integral_img.shape[0]): for j in range(1, integral_img.shape[1] - 1): integral_img[i, j] += integral_img[i, j - 1] + integral_img[i - 1, j + 1] - integral_img[i - 1, j] - print '4' + @@ -70,20 +67,19 @@ def _censure_octagon_loop(double[:, ::1] image, double[:, ::1] integral_img, i_m = (mi - 1) / 2 o_set = o_m + no i_set = i_m + ni - print '5' + for i in range(o_set + 1, image.shape[0] - o_set - 1): for j in range(o_set + 1, image.shape[1] - o_set - 1): - outer = integral_img1[i + o_set, j + o_m] - integral_img1[i + o_m, j + o_set] - integral_img[i + o_set, j - o_m] + integral_img[i + o_m, j - o_m] + outer = integral_img1[i + o_set, j + o_m] - integral_img1[i + o_m - 1, j + o_set + 1] - integral_img[i + o_set, j - o_m] + integral_img[i + o_m - 1, j - o_m] outer += integral_img[i + o_m - 1, j + o_m - 1] - integral_img[i - o_m, j + o_m - 1] - integral_img[i + o_m - 1, j - o_m] + integral_img[i - o_m, j - o_m] - outer += integral_img4[i + o_m, j - o_set] - integral_img4[i + o_set, j - o_m] - integral_img[i - o_m, j - o_m + 1] + integral_img[i - o_m, j - o_set - 1] - outer += integral_img2[i - o_set, j - o_m] - integral_img2[i - o_m, j - o_set] - integral_img[i - o_m + 1, -1] - integral_img[i - o_set - 1, j + o_m - 1] + integral_img[i - o_m + 1, j + o_m - 1] + integral_img[i - o_set - 1, -1] - outer += integral_img3[i - o_m, j + o_set] - integral_img3[i - o_set, j + o_m] - integral_img[-1, j + o_set + 1] - integral_img[i + o_m - 1, j + o_m] + integral_img[-1, j + o_m] + integral_img[i + o_m - 1, j + o_set + 1] + outer += integral_img4[i + o_m, j - o_set] - integral_img4[i + o_set + 1, j - o_m + 1] - integral_img[i - o_m, j - o_m] + integral_img[i - o_m, j - o_set - 1] + outer += integral_img2[i - o_set, j - o_m] - integral_img2[i - o_m + 1, j - o_set - 1] - integral_img[i - o_m, -1] - integral_img[i - o_set - 1, j + o_m - 1] + integral_img[i - o_m, j + o_m - 1] + integral_img[i - o_set - 1, -1] + outer += integral_img3[i - o_m, j + o_set] - integral_img3[i - o_set - 1, j + o_m - 1] - integral_img[-1, j + o_set] - integral_img[i + o_m - 1, j + o_m - 1] + integral_img[-1, j + o_m - 1] + integral_img[i + o_m - 1, j + o_set] - inner = integral_img1[i + i_set, j + i_m] - integral_img1[i + i_m, j + i_set] - integral_img[i + i_set, j - i_m] + integral_img[i + i_m, j - i_m] + inner = integral_img1[i + i_set, j + i_m] - integral_img1[i + i_m - 1, j + i_set + 1] - integral_img[i + i_set, j - i_m] + integral_img[i + i_m - 1, j - i_m] inner += integral_img[i + i_m - 1, j + i_m - 1] - integral_img[i - i_m, j + i_m - 1] - integral_img[i + i_m - 1, j - i_m] + integral_img[i - i_m, j - i_m] - inner += integral_img4[i + i_m, j - i_set] - integral_img4[i + i_set, j - i_m] - integral_img[i - i_m, j - i_m + 1] + integral_img[i - i_m, j - i_set - 1] - inner += integral_img2[i - i_set, j - i_m] - integral_img2[i - i_m, j - i_set] - integral_img[i - i_m + 1, -1] - integral_img[i - i_set - 1, j + i_m - 1] + integral_img[i - i_m + 1, j + i_m - 1] + integral_img[i - i_set - 1, -1] - inner += integral_img3[i - i_m, j + i_set] - integral_img3[i - i_set, j + i_m] - integral_img[-1, j + i_set + 1] - integral_img[i + i_m - 1, j + i_m] + integral_img[-1, j + i_m] + integral_img[i + i_m - 1, j + i_set + 1] + inner += integral_img4[i + i_m, j - i_set] - integral_img4[i + i_set + 1, j - i_m + 1] - integral_img[i - i_m, j - i_m] + integral_img[i - i_m, j - i_set - 1] + inner += integral_img2[i - i_set, j - i_m] - integral_img2[i - i_m + 1, j - i_set - 1] - integral_img[i - i_m, -1] - integral_img[i - i_set - 1, j + i_m - 1] + integral_img[i - i_m, j + i_m - 1] + integral_img[i - i_set - 1, -1] + inner += integral_img3[i - i_m, j + i_set] - integral_img3[i - i_set - 1, j + i_m - 1] - integral_img[-1, j + i_set] - integral_img[i + i_m - 1, j + i_m - 1] + integral_img[-1, j + i_m - 1] + integral_img[i + i_m - 1, j + i_set] filtered_image[i, j] = outer_wt * outer - (outer_wt + inner_wt) * inner - print '6'