基于MATLAB的图像批量2值化处理并求取面积的方法.docxVIP

  • 33
  • 0
  • 约1.64千字
  • 约 2页
  • 2017-05-02 发布于北京
  • 举报

基于MATLAB的图像批量2值化处理并求取面积的方法.docx

基于MATLAB的图像批量2值化处理并求取面积的方法

基于MATLAB图像批量二值化处理并求取面积的方法 由于个人需要,需要将图片进行二值化处理并求出相关部分面积占比,本人MATLAB小小白,网络上的解决方式大多对文件名要求较高,无法批量的读取和另存,小小白结合大家的方法,终于搞定了自己想要的效果,程序可能不太健壮[捂脸],至少还是可以用的,分享给需要的童鞋,一起学习。 程序实现的功能: 从文件夹【test1】批量读取图片(文件名任意),经过二值化处理、求出面积后,图片以文件名不变的形式存储至【test2】中,图片序号、名称、面积输出至【test2】中test.xls中。 代码如下,多多指教! CODE: clear all;clc; file_path = C:\Users\LPZ\Desktop\test1\;% 图像文件夹路径,自行定义 img_path_list = dir(strcat(file_path,*.jpg));%获取该文件夹中所有jpg格式的图像 img_num = length(img_path_list);%获取图像总数量 area=cell(img_num,3); %定义一个“图片数”行,3列的元胞数组,用于存放“序号”、“图片名称”、“面积占比” for k = 1:img_num %逐一读取图像 image_name = img_path_list(k).name;% 图像名 x = imread(strcat(file_path,image_name)); [a,b,c]=size(x); if ~isgray(x) x=rgb2gray(x); %转换为灰度图像 end level=graythresh(x); %使用最大类间方差法确定最佳阈值 xbw=im2bw(x,level); %再转换为二值图像 xbw=medfilt2(xbw); %中值滤波 bw=xbw; %滤波后二值图像 black=0; %求面积的变量 for i=1:a for j=1:b if (bw(i,j)==0) black=black+1; end end end imwrite(bw,[C:\Users\LPZ\Desktop\test2\,image_name]); %保存图片,~bw为矩阵取反,即反向 P=black/(a*b); %黑色部分占面积百分比 area{k,1}=k; %数组第一列 area{k,2}=image_name; %数组第二列 area{k,3}=P; %数组第三列 end a1={序号}; %定义excel第一列表头 b1={图片名称}; %定义excel第二列表头 c1={面积占比}; %定义excel第三列表头 xlswrite(C:\Users\LPZ\Desktop\test2\test.xls,a1,Sheet1,A1); xlswrite(C:\Users\LPZ\Desktop\test2\test.xls,b1,Sheet1,B1); xlswrite(C:\Users\LPZ\Desktop\test2\test.xls,c1,Sheet1,C1); xlswrite(C:\Users\LPZ\Desktop\test2\test.xls,area,Sheet1,A2); %定义数字和字符在excel中的显示位置

文档评论(0)

1亿VIP精品文档

相关文档