在Matlab中从RGB输入图像中查找圆边界像素坐标和RGB强度值

时间:2015-06-10 06:00:31

标签: image matlab image-processing matlab-cvst

我想从给定RGB输入图像中仅位于指定圆边界的点获取像素坐标和RGB强度值,而不绘制圆并考虑其指定的颜色。就我而言,只是在特定点上绘制圆圈。有帮助吗?感谢。

yellow = uint8([255 255 0]); 
% Create the shape inserter object.
shapeInserter = vision.ShapeInserter('Shape','Circles','BorderColor','Custom','CustomBorderColor',yellow);
% Read RGB input image.
I = imread('3.jpg'); 
% Define the circle dimensions
x1=80;
y1=80;

circle = int32([x1 y1 3]); %  [x1 y1 radius]

% Draw the circle and display the result.
J = step(shapeInserter, I, circle);
imshow(J);

1 个答案:

答案 0 :(得分:0)

您不需要计算机视觉工具箱。只需定义圆的中心坐标和指定的半径,然后使用meshgrid和逻辑索引的组合来确定(x,y)坐标以及沿圆周长的相应RGB值。

这样的事情:

%// Define parameters
x1 = 80; y1 = 80;
radius = 3;
tol = 0.1;

%// Get dimensions of image
rows = size(I,1); cols = size(I,2);

%// Define grid of coordinates
[x,y] = meshgrid(1:cols, 1:rows);

%// Define mask for valid pixels
mask = ((x - x1).^2 + (y - y1).^2) >= (radius - tol)^2;
mask = mask & ((x - x1).^2 + (y - y1).^2) <= (radius + tol)^2;

%// Get row and column locations
col = x(mask); row = y(mask);

%// Get pixel values
R = I(:,:,1); G = I(:,:,2); B = I(:,:,3);
red = R(mask); green = G(mask); blue = B(mask);

这些陈述:

mask = ((x - x1).^2 + (y - y1).^2) >= (radius - tol)^2;
mask = mask & ((x - x1).^2 + (y - y1).^2) <= (radius + tol)^2;

定义形式圆的等式:

(x - x0)^2 + (y - y0)^2 == r^2

中心坐标定义为(x0, y0),半径为r。但是,由于图像中的离散坐标,您需要获得半径公差范围内的值。我将此容差设置为0.1。该等式定义了圆的边界。因此,我们希望在图像中找到允许上述表达式为真的那些位置。

完成后,我们可以获得沿着边界的像素的行和列位置,最后我们可以使用逻辑掩码本身索引到每个通道并获取相应的红色,绿色和蓝色像素。沿边界定义的位置。

这是一个半径为30的示例,以(100,100)为中心,行和列分别设置为300。我们想象出面具的样子。白色表示我们在此时采样,黑色表示我们不采样:

enter image description here