MATLAB实现静态图像分割
待处理图像是一张药板图,我们的处理目标有以下几个:
1. 将药板从黑色背景中分离(药板部分显示为白色,背景显示为黑色);
2. 根据分割结果将药板旋转至水平;
3. 提取药板中的药丸的信息;
- 首先将药板从黑色背景中分离出来,用otsu对图像进行分割,很简单,代码是王道。
clc;clear all;
H=imread('C:\Users\Administrator\Desktop\1\1.tiff');
I=rgb2gray(H);
T=graythresh(I); %采用Otsu方法计算最优阈值T对图像二值化;
Ibw1 = im2bw(I,T);
figure, imshow(Ibw1);title('Otsu-图1');
只贴一个 结果:
接着将孔洞填充:
clear,clc,close all;
I=imread('C:\Users\Administrator\Desktop\1\1.tiff');
bw=rgb2gray(I);
bw=im2bw(I,graythresh(bw));%采用Otsu方法
BW1 = imfill(bw, 'holes');%孔洞填充
figure;imshow(BW1);title('分离出的药板')
- 将药板旋转至水平
将药板二值化之后,取出边缘,Hough变换求出线段斜率,得到角度,然后通过imrotate()函数进行自动旋转。这一步重点在于标出直线,求得斜率。
霍夫变换传送门
废话不多说,代码:
clear,clc,close all;
I=imread('C:\Users\Administrator\Desktop\1\1.tiff');
bw