matlab 图像分割

什么是图像分割

将数字图像划分成不相交,不重合的区域的过程就叫图像分割。
这很像PhotoShop里面的快速选取工具,判断边界,分割边界。

固定阈值分割

先上效果图
在这里插入图片描述
这里阈值我手动设置成了0.35,当然,你也可以通过“最大类间方差法”(OTSU)来找到一个最佳阈值。

OTSU:找到灰度直方图中两峰之间的最低点作为阈值。

%固定阈值分割
%原图
I = imread('coins.png');
subplot(221);imshow(I);

% 直方图
subplot(2,2,[2,4]);imhist(I);

%固定阈值分割,这里阈值为 0.35
level = 0.35;

%im2bw 为分割函数
I_2bw = im2bw(I,level);
subplot(223);imshow(I_2bw);

自适应阈值分割

先上效果图
在这里插入图片描述
采用自适应阈值分割方法比采用直方图分割有更好的分割效果。
对于不同的图像的适应性也更强。

%自适应阈值分割
%原图
I = imread('coins.png');
subplot(221);imshow(I);
I = im2double(I);

%直方图
subplot(2,2,[2,4]);imhist(I);

diff = 0.01; %设定一个迭代终止值
level1 = ( min(I(:)) + max(I(:)) ) / 2; %初值,当然自己目测一个常数也是可以的
arr1 = find(I>level1);  %第一部分图像
arr2 = find(I<=level1); %第二部分图像
level2 = ( (mean(I(arr1))) + (mean(I(arr2))) ) / 2; %两部分图像取平均
%通过迭代产生最佳阈值
while abs(level1 - level2) < diff
    arr1 = find(I>level1);
    arr2 = find(I<=level1);
    level2 = ( (mean(I(arr1))) + (mean(I(arr2))) ) / 2;
end

%im2bw 为分割函数
I_2bw = im2bw(I,level2);
subplot(223);imshow(I_2bw);

分割效果增强

对于边界不是非常明显的图像,可以对图像进行“平滑处理”后再进行分割。

平滑处理

平滑处理,是增强图像边界的一种方式。

猜你喜欢

转载自blog.csdn.net/qq_41297145/article/details/106099425
今日推荐