✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
为了提高提取水果最小外接矩形的计算效率与精确度,提出一种快速提取水果最小外接矩形的算法.
⛄ 部分代码
%%%寻找图像最小外接矩形
%%%先用迭代式阈值求法将图像变为二值图
img = imread('./source/test0.png');
img = rgb2gray(img);
Th = mean(img( : )); %将灰度均值设为初始阈值
newTh = 0;
i = 1;
while (Th - newTh) > 1
pic1 = img;
pic1(pic1 > Th) = 0; %大于阈值置零方便求均值
miu1 = mean(pic1(:)); %小于阈值的像素的灰度均值
pic2 = img;
pic2(pic2 < Th) = 0; %小于阈值置零方便求均值
miu2 = mean(pic2( : )); %大于阈值的像素的灰度均值
if i ~= 1
Th = newTh;
end
i = i + 1;
newTh = (miu1 + miu2) / 2;
end
imgTh = img;
imgTh(imgTh < Th) = 1;
imgTh(imgTh > Th) = 256;
imgTh = 256 - imgTh;
%%%先用迭代式阈值求法将图像变为二值图
%%%旋转图像求其MER
for angle = 0 : 1 : 90
imgRotated = double(imrotate(imgTh,angle,'bicubic','loose')); %求旋转后的图像
%imshow(uint8(imgRotated));
[row, col] = size(imgRotated);
%%%判断最小外接矩形的边界
for i = 1 : row
if sum(imgRotated(i, :)) > col
break;
end
end
yMinTest = i;
for i = row : -1 : 1
if sum(imgRotated(i, :)) > col
break;
end
end
yMaxTest = i;
% out2 = imrotate(Figure1,-typicalAngle,'bicubic','loose');
% imshow(out2);
% rectx = [XLU, XLD, XRD, XRU, XLU];
% recty = [YLU, YLD, YRD, YRU, YLU];
% imshow(uint8(imgTh));
% line(rectx(:),recty(:),'color','r');
%%%旋转图像求其MER
⛄ 运行结果
⛄ 参考文献
[1] 李洋 李岳阳. 一种快速提取植物叶片最小外接矩形的算法[J]. 江南大学学报:自然科学版, 2015, 14(3):5.