pdf417專案 1 OSTU二值化

2021-07-24 10:03:54 字數 2801 閱讀 2753

首先記錄一下理論基礎(雖然我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...