这是电池的真实图像。我想检测最小的矩形,其中包含完整的电池。我为什么想要这个?因为我想知道这个矩形的大小,所以我可以把这个尺寸和预定的尺寸进行比较。经过比较,结果必须是如果这个电池是一个AA电池,例如.谢谢。
发布于 2015-08-20 12:05:25
您可以应用一些预处理对您的图像(在特定通道的阈值,这里是绿色通道)和中值滤波器,以消除不必要的背景信号。
然后是使用区域道具识别图像中的对象的问题。电池是面积最大的对象,因此可以从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);
裁剪产量:
然后,只需将像素值转换为实际单位即可。我会让你自己决定的。
玩得开心!
发布于 2015-08-21 16:09:24
不需要为Matlab付费,只需在命令行上免费使用ImageMagick,它安装在大多数Linux发行版上,可用于OSX和Windows。
convert battery.jpg -fuzz 50% -format "%@" info:
1474x406+653+986
这告诉我们,如果我们削减背景,其余的图像(即你的电池)将是1474像素宽,406像素高,并位于坐标653,986相对于图像的左上角。
或者这个会把它提取出来
convert battery.jpg -fuzz 50% -trim result.jpg
https://stackoverflow.com/questions/32117086
复制相似问题