我目前正在使用MatLab作为数字成像课程的一部分,并尝试获取图像上的像素圆的值。我们的想法是从一个中心像素( x,y )开始,然后收集半径 r 的所有像素并返回它们的值。
到目前为止,我设法创建的就是这个(其中A_grey
是图片):
function [localMean] = getLocalMean(x, y, radius)
for x = 1:size(A_grey, 1)
for y = 1:size(A_grey, 2)
<code>
end
end
但是我并不完全确定自己在做什么,我可以在这里做一些初学者级别的建议。有什么提示吗?
答案 0 :(得分:3)
我会给你一块骨头。这其实很容易。给定要检查的width
和height
中存储的图像/查看窗口的大小,生成meshgrid
个点,然后搜索那些(x,y)
值满足圆的方程。换句话说,您希望在圈子(x,y)
的中心搜索所有(x0,y0)
值,以便:
(x - x0)^2 + (y - y0)^2 = r^2
r
是您所需圆圈的半径。因此,它就像:
[x,y] = meshgrid(1:width, 1:height);
p = (x - x0).^2 + (y - y0).^2 == r^2;
pts = [x(p) y(p)];
我们首先生成meshgrid
个积分。将meshgrid
视为一组2D数组,其中这些数组的同一点中的每个唯一空间位置为您提供该空间处的 x 和 y 坐标2D中的位置。看一下下面的例子:
[x,y] = meshgrid(1:3, 1:3)
x =
1 2 3
1 2 3
1 2 3
y =
1 1 1
2 2 2
3 3 3
就像素坐标而言,左上角为(x,y) = (1,1)
。右上角是(x,y) = (3,1)
,依此类推。请注意,惯例是x
水平,而y
垂直,正如大多数数字图像处理文献所提供的那样。如果这不是您想要的,请将meshgrid
替换为ndgrid
以遵守行/列约定。
一旦我们生成了这个点网格,我们只需通过我们的圆圈方程,看看给定中心(x,y)
的{{1}}的哪些值满足圆的方程。找到这些位置后,我们只需索引(x0,y0)
个点并返回meshgrid
个值,这些值对应于圈子周边的那些点。