| import numpy as np | |
| def filtro_2D(veces, col, row, Matriz_R): | |
| """ | |
| Applies a 2D filter to the R2 matrix to smooth it. | |
| """ | |
| R_old = np.copy(Matriz_R) | |
| R_new = np.copy(Matriz_R) | |
| for k in range(veces): | |
| for i in range(1, col-1): | |
| for j in range(1, row-1): | |
| w_A = (R_old[i-1, j] + R_old[i, j-1] + R_old[i+1, j] + R_old[i, j+1]) / 4 | |
| w_B = (R_old[i-1, j-1] + R_old[i+1, j-1] + R_old[i-1, j+1] + R_old[i+1, j+1]) / (4 * np.sqrt(2)) | |
| if (w_A + w_B) > 1: | |
| R_new[i, j] = 1 | |
| else: | |
| R_new[i, j] = 0 | |
| R_old = np.copy(R_new) | |
| return R_new | |
| def filtro_3D(veces, slices, col, row, Tensor_R): | |
| """ | |
| Applies a 3D filter to the R2 tensor. | |
| """ | |
| R_old = np.copy(Tensor_R) | |
| R_new = np.copy(Tensor_R) | |
| for u in range(veces): | |
| for k in range(1, slices-1): | |
| for i in range(1, col-1): | |
| for j in range(1, row-1): | |
| w_A = (R_old[i-1, j, k] + R_old[i, j-1, k] + R_old[i+1, j, k] + R_old[i, j+1, k] + R_old[i, j, k-1] + R_old[i, j, k+1]) / 6 | |
| w_B1 = (R_old[i-1, j, k-1] + R_old[i+1, j, k-1] + R_old[i-1, j, k+1] + R_old[i+1, j, k+1]) / (12 * np.sqrt(2)) | |
| w_B2 = (R_old[i-1, j-1, k] + R_old[i-1, j+1, k] + R_old[i+1, j-1, k] + R_old[i+1, j+1, k]) / (12 * np.sqrt(2)) | |
| w_B3 = (R_old[i, j-1, k-1] + R_old[i, j+1, k-1] + R_old[i, j-1, k+1] + R_old[i, j+1, k+1]) / (12 * np.sqrt(2)) | |
| w_C = (R_old[i-1, j-1, k+1] + R_old[i-1, j+1, k+1] + R_old[i+1, j-1, k+1] + R_old[i+1, j+1, k+1] + R_old[i-1, j-1, k-1] + R_old[i-1, j+1, k-1] + R_old[i+1, j-1 ,k-1] + R_old[i+1, j+1 ,k-1]) / (8 * np.sqrt(3)) | |
| w_B = w_B1 + w_B2 + w_B3 | |
| if (w_A + w_B + w_C) >= 1: | |
| R_new[i, j, k] = 1 | |
| else: | |
| R_new[i, j, k] = 0 | |
| R_old = np.copy(R_new) | |
| return R_new | |