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

资源简介

二维Otsu,大津法(最大类间方差)阈值分割。Matlab2016a 使用3×3邻域平均灰度作为直方图第二维,二维Otsu运算时间要比一维Otsu长。

资源截图

代码片段和文件信息

% 二维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(231);
imshow(I)title(‘原图‘);

numel = numel(size(I));
% 图像灰度化
if numel>2
    I_gray = rgb2gray(I);
else
    I_gray = I;
end
subplot(232);
imshow(I_gray)title(‘灰度图‘);

% 图像大小
[mn] = size(I_gray);

% NI=filter2(fspecial(‘average‘3)I_gray); % 第一行  第一列  最后一行  最后一列  不满足八邻域  补0计算

NI = I_gray;

% 3×3模板
for i = 2:m-1
    for j = 2:n-1
        pixsum=sum(sum(I_gray(i-1:i+1j-1:j+1)));
        pix=round(pixsum/9);
        NI(ij)=pix;
    end
end
subplot(233);
imshow(NI)title(‘邻域平均灰度图‘);

Hist=zeros(256256);
for i = 1:m
    for j = 1:n
        pix1=I_gray(ij);
        pix2=NI(ij);
        Hist(pix1+1pix2+1)=Hist(pix1+1pix2+1)+1;           
    end
end
subplot(234);
mesh(double(Hist));
title(‘二维灰度直方图‘);
xlim([0 256]);% X轴范围
ylim([0 256]);% Y轴范围
xlabel(‘灰度级‘);
ylabel(‘邻域平均灰度级‘);
zlabel(‘像素数‘);

% 灰度级
len =

评论

共有 条评论