Fixed kernel flip becouse CV2 is retarded

main
Gasper Spagnolo 2022-11-13 18:36:38 +01:00
parent 3a899115a6
commit fc599988c3
1 changed files with 39 additions and 5 deletions

View File

@ -30,7 +30,8 @@ def two_b() -> None:
kernel by dividing the values such that the sum of absolute values is 1. Effectively, kernel by dividing the values such that the sum of absolute values is 1. Effectively,
you have to divide each value by sum(abs(gx(x))). you have to divide each value by sum(abs(gx(x))).
""" """
sigma = 1 sigmas = [0.5, 1, 2]
for sigma in sigmas:
kernel = uz_image.gaussdx(sigma) kernel = uz_image.gaussdx(sigma)
print(kernel) print(kernel)
@ -54,6 +55,11 @@ def two_c() -> None:
gauss = np.array([uz_image.get_gaussian_kernel(3)]) gauss = np.array([uz_image.get_gaussian_kernel(3)])
gaussdx = np.array([uz_image.gaussdx(3)]) gaussdx = np.array([uz_image.gaussdx(3)])
# Becouse CV2 applies the correlation instead of convolution, we need to flip the kernels
gauss = np.flip(gauss, axis=1)
gaussdx = np.flip(gaussdx, axis=1)
fig, axs = plt.subplots(2, 3) fig, axs = plt.subplots(2, 3)
# Plot impulse only # Plot impulse only
@ -64,8 +70,36 @@ def two_c() -> None:
g_gt_impulse = impulse.copy() g_gt_impulse = impulse.copy()
g_gt_impulse = cv2.filter2D(g_gt_impulse, cv2.CV_64F, gauss) g_gt_impulse = cv2.filter2D(g_gt_impulse, cv2.CV_64F, gauss)
g_gt_impulse = cv2.filter2D(g_gt_impulse, cv2.CV_64F, gauss.T) g_gt_impulse = cv2.filter2D(g_gt_impulse, cv2.CV_64F, gauss.T)
axs[0, 1].imshow(g_gt_impulse, cmap='gray') axs[1, 0].imshow(g_gt_impulse, cmap='gray')
axs[0, 1].set_title('impulse * G * GT') axs[1, 0].set_title('impulse * G * GT')
# Plot impulse after convolution with G and DT
g_dt_impulse = impulse.copy()
g_dt_impulse = cv2.filter2D(g_dt_impulse, cv2.CV_64F, gauss)
g_dt_impulse = cv2.filter2D(g_dt_impulse, cv2.CV_64F, gaussdx.T)
axs[0, 1].imshow(g_dt_impulse, cmap='gray')
axs[0, 1].set_title('impulse * G * DT')
# Plot impulse after convolution with D and GT
d_gt_impulse = impulse.copy()
d_gt_impulse = cv2.filter2D(d_gt_impulse, cv2.CV_64F, gaussdx)
d_gt_impulse = cv2.filter2D(d_gt_impulse, cv2.CV_64F, gauss.T)
axs[0, 2].imshow(d_gt_impulse, cmap='gray')
axs[0, 2].set_title('impulse * D * GT')
# Plot impulse after convolution with GT and D
gt_d_impulse = impulse.copy()
gt_d_impulse = cv2.filter2D(gt_d_impulse, cv2.CV_64F, gauss.T)
gt_d_impulse = cv2.filter2D(gt_d_impulse, cv2.CV_64F, gaussdx)
axs[1, 1].imshow(gt_d_impulse, cmap='gray')
axs[1, 1].set_title('impulse * GT * D')
# Plot impulse after convolution with DT and G
dt_g_impulse = impulse.copy()
dt_g_impulse = cv2.filter2D(dt_g_impulse, cv2.CV_64F, gaussdx.T)
dt_g_impulse = cv2.filter2D(dt_g_impulse, cv2.CV_64F, gauss)
axs[1, 2].imshow(dt_g_impulse, cmap='gray')
axs[1, 2].set_title('impulse * DT * G')
plt.show() plt.show()