首先記錄一下理論基礎(雖然我tm也不怎麼懂)
大津演算法:
演算法假定該影象根據雙模直方圖包含兩類畫素:
前景畫素和背景畫素
於是它要計算能將兩類分開的最佳閾值, 使得它們的類內方差最小; 由於兩兩平方距離恆定, 所以即它們的類間方差最大。
說白了就是找乙個最為合理的閾值,用這個閾值來二值化
執行環境:matlab r2012a
ostu函式實現:
function [binaryzationgraph]=ostu(i) %傳入原rgb
clc;
%rgb影象轉成灰度圖
g=rgb2gray(i);
figure;
imshow(g);
title('灰度圖');
%1.統計各灰度級畫素在整幅影象中的個數
count=imhist(g);%統計各灰度級畫素在整幅影象中的個數
%2. 計算每個灰度級在影象中所佔的比例
[row col]=size(g); %row和col是影象的長和寬
% 個數 => 比例 : 計算每個灰度級在影象中所佔的比例
count=count/(row*col); %得到的count是歸一化的直方圖
%3. 去除兩邊不存在的灰度級
%二值化
l=256;
syms firstdotnotzero; %第乙個不為0的點
syms lastdotnotzero;%最後乙個不為0的點
%記錄直方圖( count) 第乙個不為0的點
for i=1:l
if count(i)~=0
firstdotnotzero=i;
break;
end
end%記錄直方圖( count) 最後乙個不為0的點
for i=l:-1:1
if count(i)~=0
lastdotnotzero=i;
break;
endend%擷取實現:count = count(firstdotnotzero+1:lastdotnotzero+1)
count1 = zeros(1,lastdotnotzero + 1 - firstdotnotzero);
count1 = count(firstdotnotzero+1:lastdotnotzero+1);
%4.計算前t個畫素的累加概率w0(t)和畫素期望值u0(t)
%直方圖橫座標
x=zeros(1,lastdotnotzero+1- firstdotnotzero);
for i=1:lastdotnotzero+1 - firstdotnotzero
x(i)=i;
endsum0=0;
sum1=0;
%計算u0,w0
for t=1:lastdotnotzero+1- firstdotnotzero
%w0(t) = sum(count(1:t)) ------------%
sum0=sum0+count1(t);
w0(t)=sum0;
%-------------------%
%------------ % sum(x(1:t)*count(1:t)) / w0(t) % -----------%
sum1=x(t)*count1(t)+sum1;
u0(t)=sum1/w0(t);
% ------------------------- %
end%5.計算g(t)
%設前景畫素所佔比例為w0, 期望為u0, 背景畫素所佔比例為w1,期望為u1
%計算 整個影象的期望 u = w0 * u0 + w1 * u1;
u=0;
for t=1:lastdotnotzero+1 - firstdotnotzero
u=x(t)*count1(t)+u;
end%-----------------%
max=0;
threshold=0;%閾值
for t=1:lastdotnotzero+1- firstdotnotzero
g(t)=w0(t)*(u-u0(t))^2/(1-w0(t));
if g(t)>max
max=g(t);
threshold=t;%當t使得g(t)最大時,即為影象最佳閾值
endendthreshold=threshold/(256);
binaryzationgraph = im2bw(g,threshold); %二值化函式,設定閾值
呼叫指令碼:
%1.-----------二值化-----------------%
i=imread('test.jpg'); %讀取初始
binaryzationgraph = ostu(i);
figure;
imshow(binaryzationgraph);
title('ostu二值化後結果');
pdf417專案 轉換符號碼字為待解碼數字碼字
function dcodes symboltonumber acodes load symcodes.mat ascii display 8.轉換符號碼字為待解碼碼字 符號碼字 到 數字碼字 row,col size acodes 矩陣acode中,前16列和後16列分別是起始符和終止符,這兩個符...
第二次實驗專案1專案7
檔名稱 第二次實驗專案 完成日期 2017年3月13日 對任務及求解方法的描述部分 輸入描述 無 問題描述 第二個實驗專案,選擇與迴圈 程式輸出 繳稅金額,1到1000以內的完數 一選擇程式專案1 三迴圈程式專案7 include using namespace std int main if k ...
第二週專案1 旱冰場造價
檔名稱 text.cpp 完成日期 2015年 3月 18日 版本號 v1.0 問題描述 有乙個圓形的旱冰場地,場地內抹水泥,造價為每平方公尺m元,圍欄用木條圍成,每公尺造價n元,輸入旱冰場半徑,用程式計算出其造價。程式輸入 半徑r 程式輸出 花費 include using namespace s...