基本的图像导入、处理、导出
- 读取和展示图像:
I = imread('pout.tif');
imshow(I)
- pout.tif不用再当前的工作目录下,它总是在的(自带的)
- imtool的功能比imshow更完善
- 图像在工作空间的数据
whos I
- 提高对比度
- 直方图
figure
imhist(I)
- 直方图均衡
I2 = histeq(I);
figure
imshow(I2)
figure
imhist(I2)
- 保存已处理图片
imwrite (I2, 'pout2.png');
- I2保存到工作目录中
- 图片信息
imfinfo('pout2.png')
基本图像增强和分析技术
- 读取图像到工作空间
I = imread('rice.png');
imshow(I)
- 图像预处理:因为光照不均和噪声
- 形态学处理:开操作,删除米粒(灰度级的形态学)
background = imopen(I,strel('disk',15));
数学展示背景分布:
figure
surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
set(gca,'ydir','reverse');
- 剪掉背景
I2 = I - background;
imshow(I2)
- 增强对比度
I3 = imadjust(I2);
imshow(I3);
f1=imadjust(f,[low_in high_in],[low_out high_out],gamma)灰度调整,gamma大于1变暗。参考
- 获得二值图像
level = graythresh(I3); //自动获得最佳阈值
bw = im2bw(I3,level);
bw = bwareaopen(bw, 50); //删除小面积对象,除去噪声
imshow(bw)
- 图像分析
- 连通体个数
cc = bwconncomp(bw, 4) //4连通
cc.NumObjects //有96个米粒,因为两个米粒连接在一块
- 第50个连通体(米粒)
grain = false(size(bw));
grain(cc.PixelIdxList{50}) = true; //包含米粒位置信息,[][]-->[]
imshow(grain);
- 彩色(仅仅展示)
labeled = labelmatrix(cc); //第n粒米粒的位置大小是n
RGB_label = label2rgb(labeled, @spring, 'c', 'shuffle');//映射
imshow(RGB_label)
- 连通体数据
graindata = regionprops(cc, 'basic')
Area:面积,即像素数; Centroid:质心 ; BoundingBox:外围的长方形
- 获取最小面积的米粒
grain_areas = [graindata.Area];
[min_area, idx] = min(grain_areas)
grain = false(size(bw));
grain(cc.PixelIdxList{idx}) = true;
imshow(grain);
- 面积分布
figure
histogram(grain_areas)
title('Histogram of Rice Grain Area');