如何获取图像上的像素圆的值?

时间:2015-02-13 14:31:27

标签: matlab

我目前正在使用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

但是我并不完全确定自己在做什么,我可以在这里做一些初学者级别的建议。有什么提示吗?

1 个答案:

答案 0 :(得分:3)

我会给你一块骨头。这其实很容易。给定要检查的widthheight中存储的图像/查看窗口的大小,生成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个值,这些值对应于圈子周边的那些点。