matlab 数字图像处理分块,【数字图像处理】M7. 图像瓜分 Image Segmentation (with MATLAB)...

【数字图像处理】M7. 图像分割 Image Segmentation (with MATLAB)

一、阈值 Threholding

若想将图片二值化,定义一个阈值是最简单的方法,通过graythresh可以获得一个较优的阈值。如果目标是一个特定的灰度,也可以使用阀值来二值化。有些时候,对于一副图片不能简单地去定义一个阈值或阀值,这时候可以对不同区域使用不同的阈值来处理。

im = imread('circles.tif');

x = ones(256, 1) * [1 : 256];

im2 = double(im) .* (x / 2 + 50) + (1 - double(im)) .* x / 2;

im3 = uint8(255 * mat2gray(im2));

subplot(1, 3, 1);

imshow(im3);

title('Origin');

subplot(1, 3, 2);

t = graythresh(im3);

imt = im2bw(im3, t);

imshow(imt);

title('Single Thresholding');

subplot(1, 3, 3);

p1 = im3(:, 1 : 64);

p2 = im3(:, 65 : 128);

p3 = im3(:, 129 : 192);

p4 = im3(:, 193 : 256);

g1 = im2bw(p1, graythresh(p1));

g2 = im2bw(p2, graythresh(p2));

g3 = im2bw(p3, graythresh(p3));

g4 = im2bw(p4, graythresh(p4));

imshow([g1 g2 g3 g4]);

title('Adaptive Thresholding');

1325401410.png

二、边缘检测 Edge Detection

对于边缘检测,可直接使用Prewitt、Roberts、Sobel等滤波,理论上这三种中Sobel的效果最好。Laplacian通过二阶导实现,对噪声比较敏感,给出双重的边界,一般可以找过零点来获得更好的结果。Matlab中提供edge(image, type)进行边缘检测。

在下面的示例中,为了查看各个方法对噪声的适应能力,原始图像加了1%的椒盐噪声。

im = imread('cameraman.tif');

im = imnoise(im, 'salt & pepper', 0.01);

subplot(2, 3, 1);

imshow(edge(im, 'prewitt'));

title('Prewitt');

subplot(2, 3, 2);

imshow(edge(im, 'roberts'));

title('Roberts');

subplot(2, 3, 3);

imshow(edge(im, 'sobel'));

title('Sobel');

subplot(2, 3, 4);

imshow(edge(im, 'zerocross'));

title('Zero Cross');

subplot(2, 3, 5);

imshow(edge(im, 'log'));

title('Log');

subplot(2, 3, 6);

imshow(edge(im, 'canny'));

title('Canny');

1325401411.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值