truePart 1: autograding
Step 1: Select submission files
You need to write some code that returns the absolute paths to the students' homework submissions. The following code works for me, but probably not for you.
IOError: readdir("/home/fons/disorganised-mess/autograding/submissions/"): no such file or directory (ENOENT)
Here is what happened, the most recent locations are first:
- uv_errorfrom libuv.jl:97
- readdir
(dir::String; join::Bool, sort::Bool) from file.jl:851 - from This cell: line 2
submission_files = letall = readdir("/home/fons/disorganised-mess/autograding/submissions/"; join=true)filter(f -> endswith(f, ".jl"), all)
It should return an arrays of strings, something like:
"/home/fonsi/hw1/submissions/hw1 - fonsi.jl"
"/home/fonsi/hw1/submissions/hw1 - template.jl"
Another cell defining submission_files contains errors.
Step 2: autograde actions
I have already written these, you can ignore this.
"name"
:(student.name)
"kerberos_id"
:(student.kerberos_id)
"1.1 - random vector"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:111 =#
length(random_vect) == 10 && length(Set(random_vect)) == 10
end"1.1 - mean"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:115 =#
mean([-1, -1, 2]) ≈ 0
end"1.1 - mean of random vec"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:119 =#
m == mean(random_vect)
end"1.1 - demean function"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:123 =#
demean([1, 2, 3, 4, 5]) ≈ [-2, -1, 0, 1, 2]
end"1.2 - create bar - 20"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:128 =#
create_bar() ≈ let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:129 =#
x = zeros(100)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:130 =#
x[40:59] .= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:131 =#
x
end
end"1.2 - create bar - 20 or 21"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:136 =#
create_bar() ≈ let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:137 =#
x = zeros(100)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:138 =#
x[40:59] .= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:139 =#
x
end || create_bar() ≈ let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:142 =#
x = zeros(100)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:143 =#
x[40:60] .= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:144 =#
x
end
end"1.3 - vecvec_to_matrix"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:150 =#
vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]) || vecvec_to_matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == (hcat([1, 2, 3], [4, 5, 6], [7, 8, 9]))'
end"1.3 - matrix_to_vecvec"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:155 =#
let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:156 =#
A = [1 2; 4 5; 7 8]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:157 =#
matrix_to_vecvec(A) == collect(eachcol(A)) || matrix_to_vecvec(A) == collect(eachrow(A))
end
end"2.1 - mean colors"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:164 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:165 =#
t = testimg()
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:166 =#
mean_colors(t) == ((mean(t)).r, (mean(t)).g, (mean(t)).b) || mean_colors(t) == RGB((mean(t)).r, (mean(t)).g, (mean(t)).b)
end"2.2 - quantize::Number"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:172 =#
quantize(3) ≈ floor(30) / 10
end"2.3 - quantize::Color"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:177 =#
c = rand(RGB)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:178 =#
quantize(c) == RGB(quantize(c.r), quantize(c.g), quantize(c.b))
end"2.4 - quantize::AbstractMatrix"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:183 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:184 =#
t = testimg()
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:185 =#
quantize(t) == quantize.(t)
end"2.5 - invert"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:190 =#
c = rand(RGB)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:191 =#
invert(c) == RGB(1 - c.r, 1 - c.g, 1 - c.b)
end"2.6 - noisify::Number - noise"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:198 =#
let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:199 =#
N = 10000
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:202 =#
x = [noisify(0.5, 0.25) for _ = 1:N]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:203 =#
sample_mean = sum(x) / N
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:205 =#
sample_var = sum((x .- sample_mean) .^ 2) / N
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:207 =#
abs(sample_mean - 0.5) < 0.01 && abs(sample_var - 1 / 48) < 0.01
end
end"2.6 - noisify::Number - clamp"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:214 =#
let
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:215 =#
N = 10000
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:218 =#
x = [noisify(0.5, 10) for _ = 1:N]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:220 =#
0.0 <= minimum(x) < maximum(x) <= 1.0
end
end"2.6 - noisify::Color"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:226 =#
c = rand(RGB)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:227 =#
noisify(c, 0.1) != c
end"2.6 - noisify::Image"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:231 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:232 =#
t = testimg()
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:233 =#
noisify(t, 0.1) != t
end"3.2 - extend"
10
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:241 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:242 =#
extend(v, -5) == solution_extend(v, -5)
end"3.3 - blur_1D"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:247 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:248 =#
blur_1D(v, 2) == solution_blur_1D(v, 2)
end"3.5 - convolution"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:256 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:257 =#
convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0]) == solution_convolve_vector([1, 10, 100, 1000, 10000], [0, 1, 0])
end"3.6 - gaussian_kernel - centered"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:262 =#
K = gaussian_kernel(9)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:264 =#
center = length(K) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:266 =#
K[1] < K[center] > K[end]
end"3.6 - gaussian_kernel - normalized"
2.5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:271 =#
K = gaussian_kernel(9)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:272 =#
0.9 < sum(K) < 1.1
end"4.1 - extend mat"
10
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:277 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:278 =#
M = rand(Float64, (3, 3))
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:279 =#
all([extend_mat(M, i, j) ≈ solution_extend_mat(M, i, j) for i = [-5, 4, 2], j = [-1, 1, 0, 10]])
end"4.3 - with_gaussian_blur - no error"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:304 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:305 =#
try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:306 =#
with_gaussian_blur(rand(Gray, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:308 =#
false
end || (try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:310 =#
with_gaussian_blur(rand(Float64, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:312 =#
false
end || try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:314 =#
with_gaussian_blur(rand(RGB, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:316 =#
false
end)
end"4.4 - sobel_edge_detect - no error"
5
quote
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:322 =#
begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
function solution_extend(v, i)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:4 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:5 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:6 =#
v[1]
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:7 =# i > length(v)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:8 =#
v[end]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:10 =#
v[i]
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
function solution_blur_1D(v, l)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:14 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:15 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:16 =#
mean([extend(v, i + j) for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
function solution_convolve_vector(v, k)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:20 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:21 =#
l = (length(k) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:22 =#
return map(eachindex(v)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:23 =#
sum([extend(v, i - j) * k[j + 1 + l] for j = -l:l])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
function solution_pascal(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:27 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:28 =#
if n <= 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:29 =#
[1.0]
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:31 =#
prev = pascal(n - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:32 =#
0.5 * ([prev..., 0] .+ [0, prev...])
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
function solution_gaussian_kernel(n)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:36 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:37 =#
solution_pascal(2n + 1)
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
function solution_extend_mat(M::AbstractMatrix, i, j)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:40 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:41 =#
if i < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:42 =#
solution_extend_mat(M, 1, j)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:43 =# i > size(M, 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:44 =#
solution_extend_mat(M, size(M, 1), j)
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:46 =#
if j < 1
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:47 =#
solution_extend_mat(M, i, 1)
elseif #= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:48 =# j > size(M, 2)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:49 =#
solution_extend_mat(M, i, size(M, 2))
else
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:51 =#
M[i, j]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
function solution_convolve_image(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:56 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:57 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:59 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:60 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:62 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:64 =#
extend_mat(M, (i - offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
function solution_convolve_image_inverted(M::AbstractMatrix, K::AbstractMatrix)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:69 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:70 =#
l = (size(K, 1) - 1) ÷ 2
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:72 =#
map(CartesianIndices(M)) do i
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:73 =#
sum(CartesianIndices(K)) do a
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:75 =#
offset = a - CartesianIndex(-l - 1, -l - 1)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:77 =#
extend_mat(M, (i + offset).I...) * K[a]
end
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
function solution_with_gaussian_blur(image; sigma = 3, l = 5)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:83 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
gauss(x, y; sigma = 3) = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:84 =#
(1 / (2 * pi * sigma ^ 2)) * exp(-((x ^ 2 + y ^ 2)) / (2 * sigma ^ 2))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:85 =#
K_gauss = [gauss(xy...) for xy = Iterators.product(-l:l, -l:l)]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:86 =#
convolve_image(image, K_gauss ./ sum(K_gauss))
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
function solution_sobel_edge_detect(image)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:89 =#
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:90 =#
K_sobol = [1 0 -1; 2 0 -2; 1 0 -1]
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:95 =#
x = solution_convolve_image(image, K_sobol)
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:96 =#
y = solution_convolve_image(image, K_sobol')
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:97 =#
return x .* x .+ y .* y
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
testimg() = begin
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:100 =#
rand(RGB, (10, 20))
end
end
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:323 =#
try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:324 =#
with_sobel_edge_detect(rand(Gray, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:326 =#
false
end || (try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:328 =#
with_sobel_edge_detect(rand(Float64, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:330 =#
false
end || try
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:332 =#
with_sobel_edge_detect(rand(RGB, (20, 10))) isa Array
catch
#= /home/runner/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#eaa49370-e6da-11ea-21d9-ddf11a7df51f:334 =#
false
end)
endall (generic function with 11 methods)107.5UndefVarError: HTMLTable not defined
Here is what happened, the most recent locations are first:
Step 3: autograde all notebooks
Another cell defining submission_files contains errors.
"Kp8OReI8"
nothing
nothing
"/"
"127.0.0.1"
2468
1234
false
false
true
"/home/runner/work/disorganised-mess/disorganised-mess/autograding/"
false
false
0.4
false
nothing
false
0.0
0.0
"data:text/javascript;base64,"
#1 (generic function with 1 method)
false
false
true
true
false
nothing
false
true
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
"no"
"no"
2
Pluto⌀ (This table has no columns) | ||
⌀ (This table has no rows) |
Part 2: manual review
Step 1: start notebook server
Click to start notebook server:
Step 2: manual grade actions
"3.1 - colored line"
5
Did they write colored_line(v)?
"3.4 - make it interactive"
8
Did they create a slider? Does the slider control the amount of blur?
"4.2 - convolve_image"
20
Is convole_image correct?
"4.3 - Gaussian blur"
10
Does the Gaussian blur look okay?
"4.4 - Sobel filter"
10
Does the Sobel filter look okay?
53Step 3: select notebook
BoundsError: attempt to access 0-element Vector{Pair} at index [1]
Here is what happened, the most recent locations are first:
- getindexfrom array.jl:861
- first
(a::Vector{Pair}) from abstractarray.jl:398 - get
(select::PlutoUI.BuiltinsNotebook.Select) from Builtins.jl:667 - macro expansionfrom This cell: line 126
- Show more...
Autograde results for selected homework
Another cell defining inspected_notebook_index_str contains errors.
Editable view of selected homework
Manual grading
Currently stored grades for this notebook:
Another cell defining inspected_notebook_index_str and inspected_manual_results contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str and inspected_notebook contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Another cell defining inspected_notebook_index_str contains errors.
Appendix
Grading actions
ManualScoreActionManualCheckActiondo_action (generic function with 2 methods)displayname (generic function with 1 method)Misc
eval_in_notebook (generic function with 1 method)Not used
""MethodError: no method matching Main.workspace#3.GradedStudent(::SubString{String})
Closest candidates are:
Main.workspace#3.GradedStudent(::Any, ::Any, ::Any) at ~/work/disorganised-mess/disorganised-mess/autograding/updated.jl#==#0796b462-f85c-11ea-1bf2-53ad24ec447c:2
Here is what happened, the most recent locations are first: