Обработка видео — анализ границ объектов
Author
using Images, ImageFiltering, VideoIO
function calculate_brightness(pixel::AbstractRGB)::Float64
return 0.299 * red(pixel) + 0.587 * green(pixel) + 0.114 * blue(pixel)
end
function calculate_energy(image::AbstractMatrix{<:AbstractRGB};
sobel_kernel::Tuple=(Kernel.sobel()[1], Kernel.sobel()[2]))::Matrix{Float64}
gray_image = calculate_brightness.(image)
gradient_x = imfilter(gray_image, sobel_kernel[1])
gradient_y = imfilter(gray_image, sobel_kernel[2])
energy_map = sqrt.(gradient_x.^2 + gradient_y.^2)
return energy_map
end
println("Чтение видео...")
println()
video = VideoIO.openvideo("input.mp4")
frame = read(video)
close(video)
println("Размер кадра: ", size(frame))
println("Тип данных: ", eltype(frame))
println()
println("Вычисление карты энергии...")
@time energy_result = calculate_energy(frame)
energy_normalized = energy_result ./ maximum(energy_result)
println()
save("first_frame_energy_improved.png", energy_normalized)
display(load("first_frame_energy_improved.png"))
println("Готово! Результат сохранён в first_frame_energy_improved.png")
println()
println("Максимальное значение энергии: ", maximum(energy_result))
println("Минимальное значение энергии: ", minimum(energy_result))