Hello, I’m trying to follow the computational thinking course to learn Julia unfortunately I am stuck at question 2.2 in homework 2.
This is the exercise is this :
Implement a new method
convolve(M, K)
that applies a convolution to a 2D array M
, using a 2D kernel K
. Use your new method extend
from the last exercise.We already have the extend() function :
function extend(M, i, j)
num_rows, num_columns = size(M)
i = clamp(i, 1, num_rows)
j = clamp(j, 1, num_columns)
return M[i,j]
end
Unfortunately my function convole doesn’t seem to work properly. Here is what I have written so far :
function convolve(M::AbstractMatrix, K::AbstractMatrix)
num_rows_K, num_columns_K = size(K)
num_rows_M, num_columns_M = size(M)
length_row = Int((num_rows_K-1)/2)
length_col = Int((num_columns_K-1)/2)
final = zeros(num_rows_M,num_columns_M)
for row in 1:num_rows_M, col in 1:num_columns_M
nearest_values = [extend(M, i, j) for i in row - length_row:row + length_row,
j in col - length_col:col + length_col]
weighted = nearest_values .* K
total = sum(weighted)
final[row, col] = total
end
return final
end
But is doesn’t work
I have tried to make the same thing in VSCode to make sure that it is working as it should, and I can’t figure out why it is not working since In VSCode
m = [1 1 1; 1 1 1; 1 1 1]
k = [1 1 1; 1 1 1; 1 1 1]
function extend(M, i, j)
num_rows, num_columns = size(M)
i = clamp(i, 1, num_rows)
j = clamp(j, 1, num_columns)
return M[i,j]
end
function convolve(M::AbstractMatrix, K::AbstractMatrix)
num_rows_K, num_columns_K = size(K)
num_rows_M, num_columns_M = size(M)
length_row = Int((num_rows_K-1)/2)
length_col = Int((num_columns_K-1)/2)
final = zeros(num_rows_M,num_columns_M)
for row in 1:num_rows_M, col in 1:num_columns_M
nearest_values = [extend(M, i, j) for i in row - length_row:row + length_row, j in col - length_col:col+length_col]
weighted = nearest_values .* K
total = sum(weighted)
final[row, col] = total
end
return final
end
convolve(m, k)
Results in a 3x3 matrix (which is what is expect):
9.0 9.0 9.0
9.0 9.0 9.0
9.0 9.0 9.0
Thank you in advance !