69 lines
1.6 KiB
Julia
69 lines
1.6 KiB
Julia
using FileIO
|
|
using Images, ImageView
|
|
using Colors
|
|
using Formatting
|
|
using FFTW
|
|
|
|
function idealFilter(r, isLow, threshold)
|
|
if isLow
|
|
r .<= threshold
|
|
else
|
|
r .> threshold
|
|
end
|
|
end
|
|
|
|
function gaussianFilter(r, isLow, threshold)
|
|
if isLow
|
|
exp.(-(r.^2) ./ 2*(threshold^2))
|
|
else
|
|
1 .- exp.(-(r.^2) ./ 2*(threshold^2))
|
|
end
|
|
end
|
|
|
|
function butterworthFilter(r, isLow, threshold, n)
|
|
if isLow
|
|
1 ./ (1 .+ (r ./ threshold) .^ (2 * n))
|
|
else
|
|
1 ./ (1 .+ (threshold ./ r) .^ (2 * n))
|
|
end
|
|
end
|
|
|
|
function laplacianFilter(r, isLow, threshold)
|
|
-r.^2
|
|
end
|
|
|
|
function filterFactory(name, shape, isLow, threshold, other)
|
|
n, m = shape
|
|
r = sqrt.([i^2 + j^2 for i=-n/2:n/2-1, j=-m/2:m/2-1])
|
|
|
|
if name == "Ideal"
|
|
idealFilter(r, isLow, threshold)
|
|
elseif name == "Gaussian"
|
|
gaussianFilter(r, isLow, threshold)
|
|
elseif name == "Butterworth"
|
|
butterworthFilter(r, isLow, threshold, other)
|
|
elseif name == "Laplacian"
|
|
laplacianFilter(r, isLow, threshold)
|
|
else
|
|
error("Filter not found")
|
|
end
|
|
end
|
|
|
|
if abspath(PROGRAM_FILE) == @__FILE__
|
|
imagePath = ARGS[1]
|
|
filterName = ARGS[2]
|
|
filterLow = ARGS[3] .== "true"
|
|
filterThreshold = parse(UInt32, ARGS[4])
|
|
filterOther = parse(UInt32, ARGS[5])
|
|
|
|
img = load(imagePath)
|
|
img_gray = Float32.(Gray.(img))
|
|
filter = filterFactory(filterName, size(img_gray), filterLow, filterThreshold, filterOther)
|
|
#= display(filter) =#
|
|
#= println() =#
|
|
img_fft = fftshift(fft(img_gray))
|
|
out = abs.(real.(ifft(img_fft .* filter)))
|
|
filename = format("filter_{}_{}_{}_{}.png", imagePath, filterName, filterLow, filterThreshold)
|
|
save(filename, out)
|
|
end
|