基本的图像导入、处理、导出
读取和展示图像:
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));
background
数学展示背景分布:
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)
bw
图像分析
连通体个数
cc = bwconncomp(bw, 4) //4连通
cc.NumObjects //有96个米粒,因为两个米粒连接在一块
cc
第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');
分布