-
大小: 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?=
評論
共有 條評論