图像处理
在这个例子中,我们将演示如何使用Engee进行图像处理,分析用于图像处理的单个函数,考虑访问图像的可能性以及它们的处理和表示方法。
让我们从选择所需的函数库开始。
Pkg.add(["ImageShow"])
using Images # Библиотека обработки изображений
using ImageShow # Библиотека отрисовки изображений
上传图片
Load功能允许您将图像作为矩阵保存到工作区。
I = load("/user/start/examples/image_processing/processing_methods/IMG_001.jpg")
将RGB转换为灰色阴影
让我们创建一个自定义函数,用于计算三维RGB矩阵测量值总和的平均值。
RGB(红、绿、蓝)是一种加色模型,它描述了一种使用三种颜色(通常称为原色)对颜色进行编码以进行颜色再现的方法。
function brightness(pixel)
arr = pixel.r + pixel.g + pixel.b;
return sum(arr) / length(arr)
end
定义函数后,我们将调用它并绘制图像。
Ibright = brightness.(I)
simshow(Ibright)
正如你可以从上面的图片中看到,我们已经减少了图像的灰色阴影。
检测角度
角度检测方法试图识别图像中的点,这些点具有明确定义的位置,并且可以在同一场景的多个图像中可靠地识别。 这些点通常位于图像对象的角落或边缘—因此该方法的名称。
角度检测在许多计算机视觉任务中很有用,如图像配准、运动检测和全景拼接。 该方法基于这样的事实,即如果相同点的位置在两个不同的图像中是已知的,这使得能够对准这些图像。
要检测角度,我们将使用imcorner函数,该函数有一个附加指标,即检测兴趣点的阈值百分比参数。
corners = imcorner(Ibright, Percentile(98.5));
在检测到兴趣点后,我们通过将灰度图像转换为RGB并将兴趣点处的单位值分配给矩阵的第一维来将它们标记为红色。
img_copy = RGB.(Ibright)
img_copy[corners] .= RGB(1.0, 0.0, 0.0)
正如我们所看到的,角度是在图像中最对比的物体上找到的。 在这种情况下,这些是云和海。
simshow(img_copy)
检测描绘对象的边界
图像处理中的另一个常见任务是找到对象的边界。 为此,请使用内核。sobel功能,它允许您将图像转换到频域。 以下是自定义边框检测功能。
function find_energy(image)
energy_y = imfilter(brightness.(image), Kernel.sobel()[1])
energy_x = imfilter(brightness.(image), Kernel.sobel()[2])
return sqrt.(energy_x.^2 + energy_y.^2)
end
下一步,我们将对源图像应用自定义特征边界检测功能,并显示图像处理的结果。
simshow(find_energy(I))
根据处理结果,我们可以明确地确定图像中每个对象的边界,并且这些数据随后可以应用于进一步的图像处理。
结论
正如我们使用绘画的例子所示,Engee非常适合图像处理。 鉴于环境的广泛数学功能,我们可以使用自定义函数描述任何任意特定的处理算法。



