B站台湾大学郭彦甫|MATLAB 学习笔记|09 图像处理II Image Processing
MATLAB学习笔记(09 图像处理II Image Processing)
1. 提出问题
题目:如何找出图片中的米粒,并且确定他们的大小?
老师提出的建议:
- 把图像二值化(将米粒变成白色,背景变成黑色)
- 计算连接的白色像素点
2. 图像阈值化 (Image Thresholding)
计算图像理想的阈值等级:graythresh()
将图像转换为二值图像:imbw()
I = imread('rice.png');
level=graythresh(I);
bw=im2bw(I, level);
subplot(1,2,1); imshow(I);
subplot (1,2,2); imshow(bw);

P5 exercise (未)
- Write a program to convert the image
rice.png
into a binary image using a threshold - Do NOT use
im2bw()
- Try different threshold values to see if you program works
3. 背景预测 (Background Estimation)
预测图像背景的灰度等级
I = imread('rice.png');
BG = imopen(I, strel('disk', 15));
%strel('disk', 15)创建一个半径为 15 的盘形结构元素。
%J = imopen(I,SE) 对灰度或二值图像 I 执行形态学开运算,返回经过开运算的图像 J。
imshow(BG);
原图像减去背景
I = imread('rice.png');
subplot(1,3,1); imshow(I);
BG = imopen(I, strel('disk', 15));
subplot(1,3,2); imshow(BG);
I2 = imsubtract(I, BG);
subplot(1,3,3); imshow(I2);
4. 对已移除背景的图像进行图像阈值化
I = imread('rice.png'); level=graythresh(I);
bw = im2bw(I, level); subplot (1,2,1); %把直接阈值化后的图像画出来(图1)
imshow(bw); BG = imopen(I, strel('disk', 15)); %得到图像背景
I2 = imsubtract(I, BG); %原图减去背景
level=graythresh(I2);
bw2 = im2bw(I2, level); %对减去背景的图像进行阈值化处理(图2)
subplot(1,2,2); imshow(bw2);
5. 连通域标记(Connected-component Labeling )
一个可以对每个物件做唯一的标记的处理方法,处理方法如下:
- 首先是两个矩阵,一个是二值图像矩阵,一个是标签矩阵
- 从二值图像矩阵第一行开始从左往右进行扫描,在第二行找到一个元素
1
对其进行标记,并在标签矩阵的对应位置上也进行标记。
- 将二值图像中已标记过的元素
1
标记为0
,并依次在其右边和下边寻找元素1
,如果有的话将其标记,并在标签矩阵的对应位置也进行标记。
- 重复过程2,直到所有标记过的元素其右边和下边元素都为
0
,得到第一个连通的区域1:
- 继续在二值图像上搜寻下一个连通区域
MATLAB 内建的连通域标记 bwlabel()
I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
%BW为二值化图像,8为连通类型(8连通),labeled为便签处理后的图像(标签矩阵),numObjects为物件个数
内建函数
bwlabel()
的搜寻顺序为从上到下
6. 对物件进行彩色编码:label2rgb()
I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
RGB_label=label2rgb(labeled);%将标签矩阵以彩色方式展示出来
imshow(RGB_label);
P15 exercise(未)
- Plot the histogram of grain size(画出米粒大小的直方图)
- Identify all the grains in the image by painting them in red(把米粒用红色标出)
7. 查看物件参数
查看图片中识别的物件参数
I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
graindata = regionprops(labeled, 'basic');%返回二值图像 labeled 中每个 8 连通分量(对象)的属性集的测量值。如果指定 'basic',则 regionprops 仅计算 'Area'、'Centroid' 和 'BoundingBox' 测量值。
graindata(51)%查看第 51 个物件的参数
>> Class_9
ans =
包含以下字段的 struct:
Area: 155 %区域中的实际像素数
Centroid: [112.4258 245.8645] %区域的质心
BoundingBox: [108.5000 234.5000 8 22] %包含区域的最小外接框的位置和大小
8. 交互式选择:bwselaect()
使用鼠标选择物件
I=imread('rice.png'); level=graythresh(I);
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); BW=im2bw(I2, graythresh(I2));
ObjI = bwselect(BW); imshow(ObjI); %对图像,鼠标左键点击选择,右键确定


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具