Aar*_*ung 5 arrays rectangles overlap julia
我是 Julia 的新手,我正在尝试了解基本的数据可视化。我正在创建一个二维噪声数组:
xRange, yRange = 1:1:300, 1:1:300
maxVal = 0.3
noiseArr = rand(length(xRange),length(yRange))*maxVal
Run Code Online (Sandbox Code Playgroud)
结果数组如下所示(左)。我想识别特定像素——由具有长度、宽度和旋转度的矩形定义——并将这些值设置为已知数字。最终,我想要像下图(右)所示的图像。
我没有包偏好,但我一直在查看图像、OpenCV 等。我希望有一种直接的方法来做到这一点。
我想识别特定的像素——由具有长度、宽度和旋转的矩形定义
知道长度、宽度和旋转不足以在平面上唯一地定位矩形。您还需要翻译。
这是一个简单的代码,为您提供了一个可以做什么的示例(它不是超级高效,但对于演示目的来说足够快):
function rectangle!(x1, x2, x3, noiseArr, val)
A = [x2-x1 x3-x1]
b = x1
iA = inv(A)
for i in axes(noiseArr, 1), j in axes(noiseArr, 2)
it, jt = iA * ([i, j]-b)
0 <= it <= 1 && 0 <= jt <= 1 && (noiseArr[i, j] = val)
end
end
x1 = [40, 140]
x2 = [230, 100]
x3 = [50, 170]
rectangle!(x1, x2, x3, noiseArr, 0.0)
Run Code Online (Sandbox Code Playgroud)
在其中-而不是传递旋转、缩放和平移,我认为更容易假设您传递矩形x1、 、x2和的三个顶点x3(假设其边由x1-x2和x1-x3对形成),并且它计算您需要的仿射变换。val是矩形内部像素应获得的值。
请注意,本质上我们所做的是计算矩形的反向仿射变换回单位正方形,并检查哪些点位于单位正方形内(这很容易)。
(正如上面的评论者所指出的——这不是一个最佳的方法,因为你做了很多不需要的计算,但我希望它有更容易理解的好处;Julia 的好处还在于编写这样的循环不是问题,而且运行速度仍然足够快)