⑴ MATLAB有OTSU分割圖像的函數嗎
有的,函數是graythresh,代碼如下,coins.png是自帶的圖像,代碼可直接調用:
I=imread('coins.png');
level=graythresh(I);
BW=im2bw(I,level);
imshow(BW)
⑵ 求一個matlab代碼:使用otsu進行閾值分割,提取圖中目標,背景全變為黑色或白色。
I=imread('coins.png');
figure,imshow(I);
level=graythresh(I);
BW=im2bw(I,level);
BW=imfill(BW,'holes');
figure,imshow(BW);
coins.png
⑶ MATLAB--數字圖像處理 Otsu演算法(雙閾值)
該演算法就是利用otsu演算法計算出兩個閾值
公式
g=w0 (u0-u)^2+w1 (u1-u) ^2+ w2*(u2-u) ^2
g最大值時,就可以選出兩個閾值
求兩個閾值
利用這兩個閾值分割圖像
主函數調用
⑷ 求一個用otsu演算法的圖像分割matlab程序
image_1=imread('E:\ebook\lena.bmp'); %讀入圖片
image_1=rgb2gray(image_1);%灰度化
[m,n]=size(image_1);%計算圖片的像素點個數,行列,n是列數,Gray
num=zeros(1,256);%存放各灰度級出現的次數
p=zeros(1,256);%存放各灰度級的比率
image_1=double(image_1);%雙精度化
for i=1:m
for j=1:n
num(image_1(i,j)+1)=num(image_1(i,j)+1)+1;%統計各灰度級的像素點個數
end
end
for i=1:256
p(i)=num(i)/(m*n);%計算各灰度級出現的比率
end
for i=2:256
if p(i)~=0
st=i+1;%實現尋找出現比率不為0的最小灰度值
break
end
end
for i=256:-1:1
if p(i)~=0;
nd=i-1;%實現找出出現比率不為0的最大灰度值
break
end
end
%以下程序實現利用最小方差和法找出門閾值
w=inf; th=0;
for t=st:nd%最小非零比率灰度值到最大非零比率灰度值
qt1=0; qt2=0;%前景後景像素點比率
u1=0; u2=0;%前景後景均值
v1=0; v2=0;%
for i=1:t
qt1=qt1+p(i);
end
for i=1:t
u1=u1+i*p(i)/qt1;
end
for i=1:t
v1=v1+((i-u1)^2)*p(i)/qt1;
end
for i=t+1:256
qt2=qt2+p(i);
end
for i=t+1:256
u2=u2+i*p(i)/qt2;
end
for i=t+1:256
v2=v2+((i-u2)^2)*p(i)/qt2;
end
if qt1*v1+qt2*v2<w
th=t; w=qt1*v1+qt2*v2 ;
end
end
for i=1:m
for j=1:n
if (image_1(i,j)+1>th)
image_2(i,j)=255;
else
image_2(i,j)=0;
end
end
end
image_2=uint8(image_2);%讀入讀出變換
figure,imshow(image_2);%顯示二值化後的圖片
⑸ 求MATLAB代碼
我只能說,這種限定行數的東西很疼。
再說句不好聽的,多一些空行,代碼一行拆成兩行寫,多一些注釋,再牛一點把一些MATLAB自帶的函數用循環再實現一次,這樣的話,幾百行的代碼肯定可以干到1200行。
⑹ 【高分】用Matlab實現中值濾波與Otsu演算法
告訴你一個簡單的方法
你可以edit
medfilt2
edit
graythresh
就可以得到原函數的詳細編碼,然後再稍微修改一下就行了唄
⑺ 用matlab求圖像閾值分析程序,急啊~
我給你提供2種方法,一種是直方圖閾值法一種是最大類間方差
直方圖閾值法
用 MATLAB實現直方圖閾值法:
I=imread(' c4.jpg ');
I1=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I1);
title(' 灰度圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
[m,n]=size(I1); %測量圖像尺寸參數
GP=zeros(1,256); %預創建存放灰度出現概率的向量
for k=0:255
GP(k+1)=length(find(I1==k))/(m*n); %計算每級灰度出現的概率,將其存入GP中相應位置
end
subplot(2,2,2),bar(0:255,GP,'g') %繪制直方圖
title('灰度直方圖')
xlabel('灰度值')
ylabel(' 出現概率')
I2=im2bw(I,150/255);
subplot(2,2,3),imshow(I2);
title('閾值150的分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I3=im2bw(I,200/255); %
subplot(2,2,4),imshow(I3);
title('閾值200的分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
自動閾值法:Otsu法
用MATLAB實現Otsu演算法:
clc
clear all
I=imread(' c4.jpg ');
subplot(1,2,1),imshow(I);
title('原始圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
level=graythresh(I); %確定灰度閾值
BW=im2bw(I,level);
subplot(1,2,2),imshow(BW);
title('Otsu 法閾值分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系