如何在此图片中检测具有特定尺寸的矩形,并在Matlab中将矩形尺寸与预定尺寸进行比较?

时间:2015-08-20 11:30:39

标签: matlab image-processing

这是电池的真实图像。我想检测包含完整电池的最小矩形。我为什么要这个?因为我想知道这个矩形的大小所以我可以将这个尺寸与预定的尺寸进行比较。在比较之后,结果必须是例如该电池是AA电池。感谢。

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以对图像应用一些预处理(特定通道上的阈值,此处为绿色通道)和中值滤波器,以去除不需要的背景信号。

然后使用regionprops来识别图像中的对象。电池是具有最大面积的对象,因此您可以使用clear clc %/ Read and pre-process the image to clear unwanted signal Im = imread('Battery.jpg'); ImBW = im2bw(Im(:,:,2),.25); ImBW = medfilt2(ImBW,[7 7]); %// Detect objects in cleaned image S = regionprops(ImBW,'BoundingBox','Area'); %// Identify battery as largest object [MaxArea,MaxIndex] = max(vertcat(S.Area)); imshow(Im,'InitialMagnification',20) %// Display results and message hold on rectangle('Position',S(MaxIndex).BoundingBox,'LineWidth',2,'EdgeColor','y') Length = S(MaxIndex).BoundingBox(3); Height = S(MaxIndex).BoundingBox(4); message = sprintf('The height is %0.2f pixels \nand length is %0.2f pixels',Height,Length); h = msgbox(message); 返回的结构中的相应索引来获取封闭边界框的大小。

{{1}}

裁剪输出:

enter image description here

然后您只需将像素值转换为实际单位。我会把那部分告诉你。

玩得开心!

答案 1 :(得分:0)

无需为Matlab付费,只需在命令行上免费使用ImageMagick即可免费使用,ImageMagick安装在大多数Linux发行版上,适用于OSX和Windows。

convert battery.jpg -fuzz 50% -format "%@"  info:
1474x406+653+986

这告诉我们,如果我们将背景剪掉,剩下的图像(即你的电池)将是1474像素宽,406像素高,位于相对于图像左上角的坐标653,986处。 / p>

或者这实际上会提取它:

convert battery.jpg -fuzz 50% -trim result.jpg

enter image description here