资源简介
Otsu,大津法(最大类间方差)阈值分割。采用分块思想,将一副图像的灰度图分成若干个子图像,对每个子图像进行Otsu阈值分割,再拼接。Matlab2016a
代码片段和文件信息
% 分块Otsu
clear all; % 清除所有变量 在function里不能使用
% close all; % 关闭所有figure 在function里不能使用
clc;
[filenamepathname]=uigetfile({‘*.jpg;*.bmp;*.tif;*.png;*.gif‘‘All Image Files‘;‘*.*‘‘All Files‘});
tic;
t1 = clock;
% 读取图像
I = imread([pathnamefilename]);
% I = imread(‘F:\matlab2016\bin\pic\lena.jpg‘);
figure;
subplot(221);
imshow(I)title(‘原图‘);
% 图像灰度化
numel = numel(size(I));
if numel>2
I_gray = rgb2gray(I);
else
I_gray = I;
end
subplot(222);
imshow(I_gray)title(‘灰度图‘);
% 转为双精度
I_double = double(I_gray);
% 图像大小
[m n] = size(I_gray);
% 图像块大小 k*k
k = 80;
z1 = ceil(m/k);
z2 = ceil(n/k);
for i = 1:z1
for j = 1:z2
if i*k>m
e1 = m;
else
e1 = k*i;
end
if j*k>n
e2 = n;
else
e2 = k*j;
end
% 分块阈值
T = Otsu_Block_T(I_gray(k*(i-1)+1:e1k*(j-1)+1:e2));
for x = k*(i-1)+1:e1
for y = k*(j-1)+1:e2
if I_gray(xy)>T
I_gray(xy)=255;
else
I_gray(xy)=0;
end
end
end
end
end
subplot(223);
imshow(I_gray)title(‘分块Otsu阈值分割‘);
disp([‘etime程序总运行时间:‘num2str(etime(clockt1))]);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1390 2017-08-31 11:16 Otsu_Block\Otsu_Block.m
文件 940 2017-08-31 11:16 Otsu_Block\Otsu_Block_T.m
目录 0 2017-08-31 13:51 Otsu_Block\
- 上一篇:Matlab二维Otsu阈值分割
- 下一篇:小子域滤波代码 用MATLAB实现
评论
共有 条评论