答案 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}}
裁剪输出:
然后您只需将像素值转换为实际单位。我会把那部分告诉你。
玩得开心!
答案 1 :(得分:0)