Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 用MATLAB对图像进行包围盒处理_Image Processing_Matlab_Bounding Box_Matlab Figure - Fatal编程技术网

Image processing 用MATLAB对图像进行包围盒处理

Image processing 用MATLAB对图像进行包围盒处理,image-processing,matlab,bounding-box,matlab-figure,Image Processing,Matlab,Bounding Box,Matlab Figure,我试图在下图中的白色斑点周围绘制一个边界框: 我喜欢这样: bw = imread('box.jpg'); bw=im2bw(bw); imshow(bw) L = bwlabel(bw); s = regionprops(L, 'Area', 'BoundingBox'); s(1); area_values = [s.Area]; idx = find((100 <= area_values) & (area_values <= 1000)); % list of al

我试图在下图中的白色斑点周围绘制一个边界框:

我喜欢这样:

bw = imread('box.jpg');
bw=im2bw(bw);
imshow(bw)
L = bwlabel(bw);
s = regionprops(L, 'Area', 'BoundingBox');
s(1);
area_values = [s.Area];
idx = find((100 <= area_values) & (area_values <= 1000)); % list of all the objects   

%whose area is between 100 and 1000

bw2 = ismember(L, idx); %construct a binary image containing all the objects whose 

%area is between 100 and 1000 by passing L and idx to ismember. 

imshow(bw2)
bw=imread('box.jpg');
bw=im2bw(bw);
imshow(bw)
L=bw标签(bw);
s=区域属性(L,‘区域’、‘边界框’);
s(1);
面积_值=[s.面积];
idx=find((100Pseduo-

  • 在blob中选择最大y、最大x、最小x、最小y,即blob上的点。这些是可以用于构建边界框的坐标
假设图像左上角为(0,0)

以及查找最小/最大值和索引

[r,c]=find(img==min(min(img)))
[r,c]=find(img==max(max(img)))
r、 c表示img矩阵中的行和列

  • 我已在图像上标记了可用于创建边界框的点
  • 缩放图像以获得更好的视图。

您尝试过图像工具箱中的regionprops吗?

我认为您可以尝试使用bBoundries

boundaries = bwboundaries(blob);

numberOfBoundaries = size(boundaries);

for k = 1 : numberOfBoundaries

    thisBoundary = boundaries{k};

    plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);

end

作为这个问题的第20000位观众,我将回答提问者的提问

要在页面上呈现矩形,您只需要正确解释形状的边框。您已经在
s(idx)中计算过了。BoundingBox

因此,将以下两行添加到脚本中:

bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');
您将得到:


我在上面的代码之后对其进行了三次修改。但这不是一种好的方法:imshow(bw2)矩形('Position',[s(2).形心+35,70,100],'EdgeColor','r')。非常感谢您的解释。您能告诉我如何在斑点中选择最大的y,最大的x,最小的x,最小的y吗?
bb = s(idx).BoundingBox;
rectangle('Position',[bb(1) bb(2) bb(3) bb(4)],'EdgeColor','green');