• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: Matlab;Otsu  

资源简介

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\

评论

共有 条评论