掏出你拍得晃眼或者有点糊但主体还能看见的苹果照,今天咱们用Matlab扒掉它的像素“外衣”,只剩轮廓那个“干净骨架子” 利用Matlab提取苹果图像形状轮廓线先把图捞进Matlab的工作区% 记得把你的苹果图放到当前文件夹或者写绝对路径 img_raw imread(apple_test.jpg); % 顺手瞅一眼原图避免拿成梨啊橘子的 figure(1); imshow(img_raw); title(你那只苹果的素颜或者美颜);要是原图背景太复杂比如苹果放在水果摊里一堆叶子橘子中间或者太暗太亮可以先补个imadjust调调对比度或者用roipoly手动框个苹果范围出来不然后面提取的轮廓肯定全是水果摊老板的货架角角。接下来是关键步骤之一转灰度。不管你用的是彩色还是黑白iPhone拍的彩色咱们只需要亮度信息轮廓只靠明暗边界吃饭% rgb2gray是Matlab默认的转灰度直接用就行 img_gray rgb2gray(img_raw); figure(2); imshow(img_gray); title(只剩黑白的苹果);然后是二值化把苹果和背景彻底分开——要么是苹果255纯白要么是背景0纯黑。别直接用graythresh默认阈值万一苹果和背景亮度差不大可以先拉个直方图看看figure(3); imhist(img_gray); title(苹果灰度直方图——找个亮暗交界的“坑”);直方图中间那个凹下去的地方就是咱们要的阈值T。比如我看我的图坑在120左右那就手动设T 120; % 换成你自己图的坑点数值 img_binary img_gray T; % 要是反了苹果变成黑的背景白的加个~就行img_binary ~(img_gray T); figure(4); imshow(img_binary); title(彻底黑白分家的苹果——白的是我要的);嫌麻烦graythresh有时候也能用但如果直方图太“平”没坑肯定不行这个得自己试。利用Matlab提取苹果图像形状轮廓线分家之后可能还有小问题比如苹果中心的籽投影出来的小黑点干扰洞洞或者背景飘着的几个白噪音点小灰尘反光这时候用形态学开运算先腐蚀后膨胀和闭运算先膨胀后腐蚀就能搞定% 选个圆形结构元素大小得看你的白噪音/干扰洞有多大我选3×3的试一下 se strel(disk, 3); % 先开运算去掉背景白噪音 img_open imopen(img_binary, se); % 再闭运算填上苹果中心的小籽洞 img_clean imclose(img_open, se); figure(5); imshow(img_clean); title(洗干净脸、补好洞的苹果);结构元素别选太大不然苹果的小凹陷比如苹果把儿的坑也会被填没最后就是最爽的一步扒轮廓Matlab自带的bwboundaries函数太香了能直接找到所有轮廓的坐标% B是轮廓坐标的元胞数组每个元胞存一个轮廓的x、y注意Matlab的x是列y是行别搞反画图 % L是标签矩阵咱暂时不用 [B, L] bwboundaries(img_clean, noholes); % noholes只找外轮廓加上可以少处理点洞洞的内轮廓 % 现在把轮廓画在原图或者干净二值图上都行我选原图对比感强 figure(6); imshow(img_raw); hold on; title(带轮廓线的苹果); % 循环画所有轮廓虽然咱要的是外轮廓但万一有小瑕疵轮廓也看看想只画第一个就去掉循环 for k 1:length(B) boundary B{k}; % boundary(:,2)是x列boundary(:,1)是y行 plot(boundary(:,2), boundary(:,1), r, LineWidth, 2); end hold off;搞定要是想把轮廓坐标导出来做后续的形状分析比如圆度计算、周长面积测量直接用xlswrite把B里的第一个元胞外轮廓存成Excel就行记得转一下顺序符合Excel的习惯。