4

所以,我有一个 RGB 图像,我在图像的一个区域周围放置了一个矩形(边界框)。但是,我无法获得沿该矩形周边的像素值。

我试过研究这个功能regionprops,但没有发现任何有用的东西。

我以为我可以通过知道边界框( , , , )(x,y)沿线的点列表来获得像素值,但是没有特定的功能。任何人都可以帮忙吗?x_inity_initx_widthy_width

4

2 回答 2

2

我不知道图像处理工具箱中是否有针对此的特定功能,但是您描述的功能很简单,可以自己实现:

function pixel_vals = boundingboxPixels(img, x_init, y_init, x_width, y_width)

    if x_init > size(img,2) 
        error('x_init lies outside the bounds of the image.'); end
    if y_init > size(img,1)
        error('y_init lies outside the bounds of the image.'); end

    if y_init+y_width > size(img,1) || x_init+x_width > size(img,2) || ...
       x_init < 1 || y_init < 1
        warning([...
            'Given rectangle partially falls outside image. ',... 
            'Resizing rectangle...']);
    end

    x_min   = max(1, uint16(x_init));
    y_min   = max(1, uint16(y_init));
    x_max   = min(size(img,2), x_min+uint16(x_width));
    y_max   = min(size(img,1), y_min+uint16(y_width));
    x_range = x_min : x_max;
    y_range = y_min : y_max;

    Upper = img( x_range, y_min  , :);
    Left  = img(   x_min, y_range, :);
    Right = img(   x_max, y_range, :);
    Lower = img( x_range, y_max  , :);

    pixel_vals = [...
       Upper
       permute(Left, [2 1 3]) 
       permute(Right, [2 1 3])
       Lower];

end
于 2012-10-03T04:28:31.727 回答
0

对于任何其他参考这个问题,我有同样的问题并使用了罗迪奥尔登胡斯方法,但它在我的情况下效果不佳。

您可以为此使用 matlab 内置函数:

  imgRect=getrect;//get a rectangle region in image
  cropedImg=imcrop(orgImg,[xtopleft ytopleft width height]);//in croppedImg you have the value of specified region
于 2014-10-31T13:28:46.377 回答