⑴ matlab中圖像怎麼找到閾值
給你提供2種方法,一種是直方圖閾值法;一種是最大類間方差
1、直方圖閾值法
用 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; %顯示坐標系
2、自動閾值法: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; %顯示坐標系
⑵ 想問你的閾值分割是怎麼做的
簡要說一下: 圖像分割基本原理:根據圖像的組成結構和應用需求將圖像劃分為若干個互不相交的子區域的過程。這些子區域四某種意義下具有共同屬性的像素的連通集合。常用方法有: 1) 以區域為對象進行分割,以相似性原則作為分割的依據,即可根據圖像的灰度、色彩、變換關系等方面的特徵相似來劃分圖像的子區域,並將各像素劃歸到相應物體或區域的像素聚類方法,即區域法; 2) 以物體邊界為對象進行分割,通過直接確定區域間的邊界來實現分割; 3) 先檢測邊緣像素,再將邊緣像素連接起來構成邊界形成分割。 具體的閾值分割: 閾值分割方法分為以下3類: 1) 全局閾值:T=T[p(x,y)〕,即僅根據f(x,y)來選取閾值,閾值僅與各個圖像像素的本身性質有關。 2) 局部閾值:T=T[f(x,y),p(x,y)],閾值與圖像像素的本身性質和局部區域性質相關。 3) 動態閾值:T=T[x,y,f(x,y),p(x,y)],閾值與像素坐標,圖像像素的本身性質和局部區域性質相關。 全局閾值對整幅圖像僅設置一個分割閾值,通常在圖像不太復雜、灰度分布較集中的情況下採用;局部閾值則將圖像劃分為若干個子圖像,並對每個子圖像設定局部閾值;動態閾值是根據空間信息和灰度信息確定。局部閾值分割法雖然能改善分割效果,但存在幾個缺點: 1) 每幅子圖像的尺寸不能太小,否則統計出的結果無意義。 2) 每幅圖像的分割是任意的,如果有一幅子圖像正好落在目標區域或背景區域,而根據統計結果對其進行分割,也許會產生更差的結果。 3) 局部閾值法對每一幅子圖像都要進行統計,速度慢,難以適應實時性的要求。全局閾值分割方法在圖像處理中應用比較多,它在整幅圖像內採用固定的閾值分割圖像。考慮到全局閾值分割方法應用的廣泛性,本文所著重討論的就是全局閾值分割方法中的直方圖雙峰法和基於遺傳演算法的最大類間方差法。在本節中,將重點討論灰度直方圖雙峰法,最大類間方差法以及基於遺傳演算法的最大類間方差法留待下章做繼續深入地討論。 參詳書目當然是《數字圖像處理》,及網上的一些有用文檔;工具:MATLAB或VC++ ~
⑶ 一幅圖像通過閾值分割演算法得到最佳閾值,怎麼通過閾值得到分割後的兩幅圖像比如說:分割舌苔舌質
根據灰度、梯度、形態等來設定自適應閾值。
設定過程:設置→參數→選擇(灰度、梯度、形態)→輸入數值→計算閾值→搞定。
閾值又叫臨界值,是指一個效應能夠產生的最低值或最高值。
閾值又稱閾強度,是指釋放一個行為反應所需要的最小刺激強度。低於閾值的刺激不能導致行為釋放。在反射活動中,閾值的大小是固定不變的,在復雜行為中,閾值則受各種環境條件和動物生理狀況的影響。當一種行為更難於釋放時,就是閾值提高了;當一種行為更容易釋放時,就是閾值下降了。一般說來,剛剛完成某一行為後,動物對這一行為的要求就會大大下降。例如剛交過尾的動物,對於性刺激或是沒有反應或是反應很弱,這就意味著釋放性行為的閾值增加了。類似情況在覓食行為和其他行為中也很常見。另一方面,長時間未發生的行為非常容易被釋放,釋放這種行為的刺激強度會變得非常小。在極端情況下,閾值的降低可以導致行為的自發產生,這就是空放行為(vacuum behavior)。空放行為是一種無刺激行為釋放,是達不到該種行為目的的一種行為。最令人信服的實例是織巢鳥的築巢行為。飼養在鳥籠中的織巢鳥,在得不到任何築巢材料和代用物的情況下,也完全可以表現出築巢動作,雖然這種動作達不到它本來的目的。
閾值又叫臨界值,是指一個效應能夠產生的最低值或最高值。
⑷ 閾值法分割後怎麼還原為原來的矩陣
程序如下,先將下面函數保存,然後給出X與d,再運行函數,注意函數名是保存的m文件名(如果嫌麻煩,可直接截取函數主體內容運行):
%------------------------------------------------
function Y=F(X,d) %X為目標矩陣,需給定; d為小於的某值
N=numel(X); %矩陣X的元素個數
a=find(X<d); %找出X中小於d的元素的序號(具體可help find)
%下面插值,採用最簡單的移動平均,即需要插值的點的值改為其前面兩個與後面兩個(共4個)元素的平均值;
%但是最前面與最後面兩個如果小於d,無法按上面方法插值,簡單期間,採用原值;
b=a(find(a>2a<(N-1)));
X(b)=(X(b-1)+X(b-2)+X(b+1)+X(b+2))/4; %插值,將需要替換的位置按上述方式插值。
Y=X;
%------------------------------------------------
不過這樣有個問題是插值時,由於移動平均是按元素排序一個個替換的,所以有的需要替換的元素的後面的兩個元素有可能都小於閾值,所以導致替換後的值仍可能小於閾值。但這種情況相對可能性較小,如果出現了,將所得的矩陣再用上面的函數做一次變換,應該就能排除這種情況。 當然,樓主如果自己有更好的插值想法,也可以以此為基礎自行設定了。
⑸ hbase分布式資料庫region大小自動分割閥值設置為2G,並重啟了hadoop集群,但是region卻不自動分割
教育廳的信號突然擔心
⑹ outs閾值分割法和全局閾值分割法一樣嘛
它是一種基於區域的、
簡單的通過灰度值信息提取形狀的技術,因其實現簡單、計算量小、性能穩定而成為圖像分割中最基本和應用最廣泛的分割技術。往往閾值分割後的輸出圖像只有兩種灰度值:255和0,所以閾值分割處理又常稱為圖像的二值化處理。閾值分割處理主要是根據灰度值信息提取前景,所以對前景物體與背景有較強對比度的圖像的分割特別有用。對對比度很弱的圖像進行閾值分割,需要先進行圖像的對比度增強,然後再進行閾值處理。全局閾值分割:灰度圖像全局閾值分割指的是將灰度值大於thresh(閾值)的像素設為白色,小於或者等於thresh的像素設為黑色,或者反過來。閾值分割的核心就是如何選取閾值。
局部閾值分割局部閾值又稱自適應閾值.即不再像全局閾值一樣,對整個矩陣只有一個閾值,而是針對輸入矩陣的每一個位置的值都有相應的閾值,這些閾值構成了和輸入矩陣同等尺寸的矩陣thresh。局部分割的核心思想也是計算閾值矩陣,比較常用的是後面提到的自適應閾值演算法(又稱移動平均值演算法),其核心思想是把每一個像素的鄰域的」平均值「作為該位置的閾值
⑺ 用VC處理圖像,閾值分割後只顯示一半的效果,另外一半為原圖不變
問題應該出在統計對每個像素進行二值化的for循環中;
針對你問題可能出錯的地方有兩個:
1.寬或者高取錯了
2.注意BMP格式的圖片一行的存儲寬度必須為4的倍數;比如圖片寬為11像素;則實際存儲的時候每行為12像素;相應的取某個像素的時候其位置應該是i*12+j;i為該像素的行號j為列號。
⑻ 在遙感中閾值是什麼意思
圖像分割是圖像處理與計算機視覺領域低層次視覺中最為基礎和重要的領域之一,它是對圖像進行視覺分析和模式識別的基本前提.閾值法是一種傳統的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術.已被應用於很多的領域。本文是在閱讀大量國內外相關文獻的基礎上,對閾值分割技術稍做總結,分三個大類綜述閾值選取方法,然後對閾值化演算法的評估做簡要介紹。
關鍵詞
圖像分割 閾值選取 全局閾值 局部閾值 直方圖 二值化
1.引言
所謂圖像分割是指根據灰度、彩色、空間紋理、幾何形狀等特徵把圖像劃分成若干個互不相交的區域,使得這些特徵在同一區域內,表現出一致性或相似性,而在不同區域間表現出明顯的不同[37].簡單的講,就是在一幅圖像中,把目標從背景中分離出來,以便於進一步處理。圖像分割是圖像處理與計算機視覺領域低層次視覺中最為基礎和重要的領域之一,它是對圖像進行視覺分析和模式識別的基本前提.同時它也是一個經典難題,到目前為止既不存在一種通用的圖像分割方法,也不存在一種判斷是否分割成功的客觀標准。
閾值法是一種傳統的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術.已被應用於很多的領域,例如,在紅外技術應用中,紅外無損檢測中紅外熱圖像的分割,紅外成像跟蹤系統中目標的分割;在遙感應用中,合成孔徑雷達圖像中目標的分割等;在醫學應用中,血液細胞圖像的分割,磁共振圖像的分割;在農業工程應用中,水果品質無損檢測過程中水果圖像與背景的分割。在工業生產中,機器視覺運用於產品質量檢測等等。在這些應用中,分割是對圖像進一步分析、識別的前提,分割的准確性將直接影響後續任務的有效性,其中閾值的選取是圖像閾值分割方法中的關鍵技術。
2.閾值分割的基本概念
圖像閾值化分割是一種最常用,同時也是最簡單的圖像分割方法,它特別適用於目標和背景占據不同灰度級范圍的圖像[1]。它不僅可以極大的壓縮數據量,而且也大大簡化了分析和處理步驟,因此在很多情況下,是進行圖像分析、特徵提取與模式識別之前的必要的圖像預處理過程。圖像閾值化的目的是要按照灰度級,對像素集合進行一個劃分,得到的每個子集形成一個與現實景物相對應的區域,各個區域內部具有一致的屬性,而相鄰區域布局有這種一致屬性。這樣的劃分可以通過從灰度級出發選取一個或多個閾值來實現。
閾值分割法是一種基於區域的圖像分割技術,其基本原理是:通過設定不同的特徵閾值,把圖像像素點分為若干類.常用的特徵包括:直接來自原始圖像的灰度或彩色特徵;由原始灰度或彩色值變換得到的特徵.設原始圖像為f(x,y),按照一定的准則在f(x,y)中找到特徵值T,將圖像分割為兩個部分,分割後的圖像為
若取 :b0=0(黑),b1=1(白),即為我們通常所說的圖像二值化。
(原始圖像) (閾值分割後的二值化圖像)
一般意義下,閾值運算可以看作是對圖像中某點的灰度、該點的某種局部特性以及該點在圖像中的位置的一種函數,這種閾值函數可記作
T(x,y,N(x,y),f(x,y))
式中,f(x,y)是點(x,y)的灰度值;N(x,y)是點(x,y)的局部鄰域特性.根據對T的不同約束,可以得到3種不同類型的閾值[37],即
點相關的全局閾值T=T(f(x,y))
(只與點的灰度值有關)
區域相關的全局閾值T=T(N(x,y),f(x,y))
(與點的灰度值和該點的局部鄰域特徵有關)
局部閾值或動態閾值T=T(x,y,N(x,y),f(x,y))
(與點的位置、該點的灰度值和該點鄰域特徵有關)
圖像閾值化這個看似簡單的問題,在過去的四十年裡受到國內外學者的廣泛關注,產生了數以百計的閾值選取方法[2-9],但是遺憾的是,如同其他圖像分割演算法一樣,沒有一個現有方法對各種各樣的圖像都能得到令人滿意的結果,甚至也沒有一個理論指導我們選擇特定方法處理特定圖像。
所有這些閾值化方法,根據使用的是圖像的局部信息還是整體信息,可以分為上下文無關(non-contextual)方法(也叫做基於點(point-dependent)的方法)和上下文相關(contextual)方法(也叫做基於區域(region-dependent)的方法);根據對全圖使用統一閾值還是對不同區域使用不同閾值,可以分為全局閾值方法(global thresholding)和局部閾值方法(local thresholding,也叫做自適應閾值方法adaptive thresholding);另外,還可以分為雙閾值方法(bilever thresholding)和多閾值方法(multithresholding)
本文分三大類對閾值選取技術進行綜述:
1) 基於點的全局閾值方法;
2) 基於區域的全局閾值方法
3) 局部閾值方法和多閾值方法
3.基於點的全局閾值選取方法
3.1 p-分位數法
1962年Doyle[10]提出的p-分位數法(也稱p-tile法)可以說是最古老的一種閾值選取方法。該方法使目標或背景的像素比例等於其先驗概率來設定閾值,簡單高效,但是對於先驗概率難於估計的圖像卻無能為力。
例如,根據先驗知識,知道圖像目標與背景象素的比例為PO/PB,則可根據此條件直接在圖像直方圖上找到合適的閾值T,使得f(x,y)>=T的象素為目標,f(x,y)<T的象素為背景。
3.2 迭代方法選取閾值[11]
初始閾值選取為圖像的平均灰度T0,然後用T0將圖像的象素點分作兩部分,計算兩部分各自的平均灰度,小於T0的部分為TA,大於T0的部分為TB
計算 ,將T1 作為新的全局閾值代替T0,重復以上過程,如此迭代,直至TK 收斂,即TK+1 =TK
經試驗比較,對於直方圖雙峰明顯,谷底較深的圖像,迭代方法可以較快地獲得滿意結果。但是對於直方圖雙峰不明顯,或圖像目標和背景比例差異懸殊,迭代法所選取的閾值不如最大類間方差法。
3.3 直方圖凹面分析法
從直觀上說,圖像直方圖雙峰之間的谷底,應該是比較合理的圖像分割閾值,但是實際的直方圖是離散的,往往十分粗糙、參差不齊,特別是當有雜訊干擾時,有可能形成多個谷底。從而難以用既定的演算法,實現對不同類型圖像直方圖谷底的搜索。
Rosenfeld和Torre[12]提出可以構造一個包含直方圖 的最小凸多邊形 ,由集差 確定 的凹面。若 和 分別表示 與 在灰度級之處的高度,則 取局部極大值時所對應的灰度級可以作為閾值。也有人使用低通濾波的方法平滑直方圖,但是濾波尺度的選擇並不容易[13]。
但此方法仍然容易受到雜訊干擾,對不同類型的圖像,表現出不同的分割效果。往往容易得到假的谷底。但此方法對某些只有單峰直方圖的圖像,也可以作出分割。如:
3.4 最大類間方差法
由Otsu[14]於1978年提出的最大類間方差法以其計算簡單、穩定有效,一直廣為使用。從模式識別的角度看,最佳閾值應當產生最佳的目標類與北京類的分離性能,此性能我們用類別方差來表徵,為此引入類內方差 、類間方差 和總體方差 ,並定義三個等效的准則測量:
, , . (3)
鑒於計算量的考量,人們一般通過優化第三個准則獲取閾值。此方法也有其缺陷,kittler和Illingworth[15]的實驗揭示:當圖像中目標與背景的大小之比很小時方法失效。
在實際運用中,往往使用以下簡化計算公式:
(T) = WA(μa-μ)2 + Wb(μb-μ)2
其中, 為兩類間最大方差,WA 為A類概率,μa為A類平均灰度,Wb 為B類概率,μb為B類平均灰度,μ為圖像總體平均灰度。
即閾值T將圖像分成A,B兩部分,使得兩類總方差 (T)取最大值的T,即為最佳分割閾值。
3.5 熵方法
八十年代以來,許多學者將Shannon信息熵的概念應用於圖像閾值化,其基本思想都是利用圖像的灰度分布密度函數定義圖像的信息熵,根據假設的不同或視角的不同提出不同的熵准則,最後通過優化該准則得到閾值。Pun[16]通過使後驗熵的上限最大來確定閾值。Kapur等人[17]的方法假定目標和背景服從兩個不同的概率分布 和 定義
(4)
使得熵
(5)
達到最大求得最佳閾值。
此方法又稱為KSW熵方法。
3.6 最小誤差閾值
此方法來源於Bayes最小誤差分類方法。
Eb(T)是目標類錯分到背景類的概率,Eo(T)是背景類錯分到目標類的概率
總的誤差概率 E(T) = Eb(T) + Eo(T)
使E(T)取最小值,即為最優分類方法。
在Kittler和Illingworth[18]於1986年提出的最小誤差法中,直方圖被視為目標與背景混合集概率密度函數 的估計
(9)
其中, 為先驗概率, ,求解下列方程可得到Bayes最小誤差閾值
(10)
遺憾的是上式中 , 和 通常是未知的,Nakagawa和Rosenfeld[19]提倡用擬合方法從直方圖中估計這些參數,但是演算法相當復雜,不易實現。
3.7 矩量保持法
矩量保持(moment-preserving)法[20] ,即矩守恆閾值法,是1985年提出的,其基本思想是最佳的閾值應該使分割前後圖像的矩量保持不變,由此可以得到一組矩量保持方程,求解該方程組就可以得到最佳閾值。
3.8 模糊集方法
模糊集理論較好的描述了人類視覺中的模糊性和隨機性,因此在圖像閾值化領域受到了廣泛的關注。模糊集閾值化方法的基本思想是,選擇一種S狀的隸屬度函數定義模糊集,隸屬度為0.5的灰度級對應了閾值,當然在上述隸屬度函數的表達式中閾值是一個未知的參數;然後在此模糊集上定義某種准則函數(例如整個圖像的總體模糊度),通過優化准則函數來確定最佳閾值。
Pal等[21]首先,他們把一幅具有 個灰度級的 圖像看作一個模糊集 ,其中隸屬函數 定義如下:
(11)
參數 稱之為交叉點(即 )。由此從圖像 的空間 平面得到模糊特性 平面。然後,基於此模糊集定義了圖像的線性模糊度 、二次模糊度 和模糊熵 ,使這三個量取最小值時的交叉點 即為最佳閾值。
文獻[21]指出模糊隸屬度函數在該演算法中的作用僅在於將圖像由灰度數據空間轉換為模糊空間 ,其函數的形式對增強結果幾乎沒有影響。這就使我們有理由使用一些形式簡單的函數形式。例如國內學者發表的一種模糊閾值方法[22]:
隸屬度μ(x)表示灰度x具有明亮特性的程度,c為隸屬函數窗寬,q對應隸屬度為0.5的灰度級。設灰度級 的模糊率為:
= min{μ(l),1-μ(l)}
則得到整幅圖像的模糊率[44]
其中,MN為圖像尺寸,L為圖像總灰度級, 圖像中灰度為 的象素個數。
對應於不同的q值,就可以計算出相應的圖像模糊率,選取使得 最小的q值,作為圖像分割的最佳閾值即可。
3.9 小結
對於基於點的全局閾值選取方法,除上述主要幾種之外還許多,但大多都是以上述基本方法為基礎,做出的改進方法或者對演算法的優化,如使用遞推方法以降低演算法復雜性。
例如在文獻[42]中,提出一種使目標和背景差距最大的閾值求取方法,類似於最大類間方差閾值法。是它的一種簡化演算法。
又如1984年Dunn等人[23]提出了均勻化誤差閾值選取方法,這種方法實質上是要使將背景點誤分為目標點的概率等於將目標點誤分為背景點的概率。類似於最小誤差閾值法。
近年來有一些新的研究手段被引入到閾值選取中。比如人工智慧,在文獻[24] 中,描述了如何用人工智慧的方法,尋找直方圖的谷底點,作為全局閾值分割。其它如神經網路,數學形態學[39][46],小波分析與變換[40]等等。
總的來說,基於點的全局閾值演算法,與其它幾大類方法相比,演算法時間復雜度較低,易於實現,適合應用於在線實時圖像處理系統。由於我的研究方向為機器視覺,所作的項目要求演算法具有良好的實時性,因此針對基於點的全局閾值方法,閱讀了較多的文獻,在綜述里敘述也相對比較詳細。
4 基於區域的全局閾值選取方法
對一幅圖像而言,不同的區域,比如說目標區域或背景區域,同一區域內的象素,在位置和灰度級上同時具有較強的一致性和相關性。
而在上述基於點的全局閾值選取方法中,有一個共同的弊病,那就是它們實際上只考慮了直方圖提供的灰度級信息,而忽略了圖像的空間位置細節,其結果就是它們對於最佳閾值並不是反映在直方圖的谷點的情況會束手無策,不幸我們通常遇到的很多圖像恰恰是這種情況。另一方面,完全不同的兩幅圖片卻可以有相同的直方圖,所以即使對於峰谷明顯的情況,這些方法也不能保證你得到合理的閾值。於是,人們又提出了很多基於空間信息的閾值化方法。
可以說,局域區域的全局閾值選取方法,是基於點的方法,再加上考慮點領域內象素相關性質組合而成,所以某些方法常稱為「二維xxx方法」。由於考慮了象素領域的相關性質,因此對雜訊有一定抑止作用[41]。
4.1 二維熵閾值分割方法[25]
使用灰度級-局域平均灰度級形成的二維灰度直方圖[43]進行閾值選取,這樣就得到二維熵閾值化方法。
(二維灰度直方圖: 灰度-領域平均灰度)
如圖,在0區和1區,象素的灰度值與領域平均灰度值接近,說明一致性和相關性較強,應該大致屬於目標或背景區域;2區和3區一致性和相關性較弱,可以理解為雜訊或邊界部分。二維熵閾值分割,就是選擇(S,T)對,使得目標類和背景類的後驗熵最大。(具體方法是一維熵閾值分割的推廣,可參見上一節)
Abutaleb[26],和Pal]結合Kapur]和Kirby的方法,分別提出了各自的二維熵閾值化方法,其准則函數都是使目標熵和背景熵之和最大化。Brink[27]的方法則是使這兩者中的較小者最大化,該方法的計算復雜度為 ,後來有人改進為遞推快速演算法將時間復雜度降為 (其中 為最大灰度級數)。
4.2 簡單統計法
Kittler等人[28],[29]提出一種基於簡單的圖像統計的閾值選取方法。使用這種方法,閾值可以直接計算得到,從而避免了分析灰度直方圖,也不涉及准則函數的優化。該方法的計算公式為
(19)
其中,
因為e(x,y)表徵了點(x,y)領域的性質,因此本方法也屬於基於區域的全局閾值法。
4.3 直方圖變化法
從理論上說,直方圖的谷底是非常理想的分割閾值,然後在實際應用中,圖像常常受到雜訊等的影響而使其直方圖上原本分離的峰之間的谷底被填充,或者目標和背景的峰相距很近或者大小差不多,要檢測他們的谷底就很難了。
在上一節基於點的全局閾值方法中,我們知道直方圖凹面分析法的弊病是容易受到雜訊干擾,對不同類型的圖像,表現出不同的分割效果。往往容易得到假的谷底。這是由於原始的直方圖是離散的,而且含雜訊,沒有考慮利用象素領域性質。
而直方圖變化法,就是利用一些象素領域的局部性質變換原始的直方圖為一個新的直方圖。這個新的直方圖與原始直方圖相比,或者峰之間的谷底更深,或者谷轉變成峰從而更易於檢測。這里的象素領域局部性質,在很多方法中經常用的是象素的梯度值。
例如,由於目標區的象素具有一定的一致性和相關性,因此梯度值應該較小,背景區也類似。而邊界區域或者雜訊,就具有較大的梯度值。最簡單的直方圖變換方法,就是根據梯度值加權,梯度值小的象素權加大,梯度值大的象素權減小。這樣,就可以使直方圖的雙峰更加突起,谷底更加凹陷。
4.4 其它基於區域的全局閾值法
鬆弛法利用鄰域約束條件迭代改進線性方程系統的收斂特性,當用於圖像閾值化時其思想是:首先根據灰度級按概率將像素分為「亮」和「暗」兩類,然後按照領域像素的概率調整每個像素的概率,調整過程迭代進行,使得屬於亮(暗)區域的像素「亮(暗)」的概率變得更大。
其它還有許多方法利用灰度值和梯度值散射圖,或者利用灰度值和平均灰度值散射圖。
5 局部閾值法和多閾值法
5.1 局部閾值(動態閾值)
當圖像中有如下一些情況:有陰影,照度不均勻,各處的對比度不同,突發雜訊,背景灰度變化等,如果只用一個固定的全局閾值對整幅圖像進行分割,則由於不能兼顧圖像各處的情況而使分割效果受到影響。有一種解決辦法就是用與象素位置相關的一組閾值(即閾值使坐標的函數)來對圖像各部分分別進行分割。這種與坐標相關的閾值也叫動態閾值,此方法也叫變化閾值法,或自適應閾值法。這類演算法的時間復雜性可空間復雜性比較大,但是抗噪能力強,對一些用全局閾值不易分割的圖像有較好的效果。
例如,一幅照度不均(左邊亮右邊暗)的原始圖像為:
如果只選擇一個全局閾值進行分割,那麼將出現下面兩種情況,都不能得到滿意的效果。
(閾值低,對亮區效果好,則暗區差) (閾值高,對暗區效果好,則亮區差)
若使用局部閾值,則可分別在亮區和暗區選擇不同的閾值,使得整體分割效果較為理性。
(按兩個區域取局部閾值的分割結果)
進一步,若每個數字都用不同的局部閾值,則可達到更理想的分割效果。
5.1.1 閾值插值法
首先將圖像分解成系列子圖,由於子圖相對原圖很小,因此受陰影或對比度空間變化等帶來的問題的影響會比較小。然後對每個子圖計算一個局部閾值(此時的閾值可用任何一種固定閾值選取方法)。通過對這些子圖所得到的閾值進行插值,就可以得到對原圖中每個象素進行分割所需要的合理閾值。這里對應每個象素的閾值合起來構成的一個曲面,叫做閾值曲面。
5.1.2 水線閾值演算法
水線(也稱分水嶺或流域,watershed)閾值演算法可以看成是一種特殊的自適應迭代閾值方法,它的基本思想是:初始時,使用一個較大的閾值將兩個目標分開,但目標間的間隙很大;在減小閾值的過程中,兩個目標的邊界會相向擴張,它們接觸前所保留的最後像素集合就給出了目標間的最終邊界,此時也就得到了閾值。
5.1.3 其它的局部閾值法
文獻[30]提出了一種基於閾值曲面的二維遺傳演算法。遺傳演算法是基於進化論中自然選擇機理的、並行的、統計的隨機化搜索方法,所以在圖像處理中常用來確定分割閾值。
文獻[31] [32]中提出一種基於局部梯度最大值的插值方法。首先平滑圖像,並求得具有局部梯度最大值的像素點,然後利用這些像素點的位置和灰度在圖像上內插,得到灰度級閾值表面。
除此之外,典型的局部閾值方法還有White和Rohrer[33]的加權移動平均閾值方法,Perez和Gonzalez[34]的適用於非均勻照射下圖像的局部閾值方法以及Shio[35]的與照射無關的對比度度量閾值方法等。總的來說,這類演算法的時間和空間復雜度都較大,但是抗噪能力強,對一些使用全局閾值法不宜分割的圖像具有較好的效果。
5.2 多閾值法
很顯然,如果圖像中含有占據不同灰度級區域的幾個目標,則需要使用多個閾值才能將它們分開。其實多域值分割,可以看作單閾值分割的推廣,前面討論的大部分閾值化技術,諸如Otsu的最大類間方差法, Kapur的最大熵方法、矩量保持法和最小誤差法等等都可以推廣到多閾值的情形。以下介紹另外幾種多閾值方法。
5.2.1 基於小波的多域值方法。
小波變換的多解析度分析能力也可以用於直方圖分析[36],一種基於直方圖分析的多閾值選取方法思路如下:首先在粗解析度下,根據直方圖中獨立峰的個數確定分割區域的類數,這里要求獨立峰應該滿足三個條件:(1)具有一定的灰度范圍;(2)具有一定的峰下面積;(3)具有一定的峰谷差。然後,在相鄰峰之間確定最佳閾值,這一步可以利用多分辨的層次結構進行。首先在最低解析度一層進行,然後逐漸向高層推進,直到最高解析度。可以基於最小距離判據對在最低層選取的所有閾值逐層跟蹤,最後以最高解析度層的閾值為最佳閾值。
5.2.2 基於邊界點的遞歸多域值方法。
這是一種遞歸的多閾值方法。首先,將象素點分為邊界點和非邊界點兩類,邊界點再根據它們的鄰域的亮度分為較亮的邊界點和較暗的邊界點兩類,然後用這兩類邊界點分別作直方圖,取兩個直方圖中的最高峰多對應的灰度級作為閾值。接下去,再分別對灰度級高於和低於此閾值的像素點遞歸的使用這一方法,直至得到預定的閾值數。
5.2.3 均衡對比度遞歸多域值方法。
首先,對每一個可能閾值計算它對應於它的平均對比度
其中, 是閾值為 時圖像總的對比度, 是閾值 檢測到的邊界點的數目。然後,選擇 的直方圖上的峰值所對應的灰度級為最佳閾值。對於多閾值情形,首先用這種方法確定一個初始閾值,接著,去掉初始閾值檢測到的邊界點的貢獻再做一次 的直方圖,並依據新的直方圖選擇下一個閾值。這一過程可以這樣一直進行下去,直到任何閾值的最大平均對比度小於某個給定的限制為止。
6 閾值化演算法評價簡介
盡管人們在圖像分割方面做了許多研究工作,但由於尚無通用的分割理論,現已提出的分割演算法大都是針對具體問題的,並沒有一種適合於所有圖像的通用的分割演算法。另一方面,給定一個實際圖像分割問題要選擇合用的分割演算法也還沒有標準的方法。為解決這些問題需要研究對圖像分割的評價問題。分割評價是改進和提高現有演算法性能、改善分割質量和指導新演算法研究的重要手段。
然而,如同所有的圖像分割方法一樣,閾值化結果的評價是一個比較困難的問題。事實上對圖像分割本身還缺乏比較系統的精確的研究,因此對其評價則更差一些。人們先後已經提出了幾十個評價准則。這些准則中又有定性的,也有定量的;有分析演算法的,也有檢測實驗結果的,文獻[37]將它們大致分為13類。
文獻[4] 中選擇攝影師、建築物和模特三幅圖像作為標准圖像,並採用趨於一致性度量和形狀參數對幾種常用的全局閾值方法的分割結果進行了評價。結果表明對於這三幅圖像,如果希望得到的二值圖像比較均勻且目標的形狀較好,推薦使用最大熵方法、矩量保持方法和最大類間方差法。
文獻[38] 中以磁碟及鶴模型作標准圖像,在雜訊條件下用錯分概率、形狀和均勻性度量作為標准評估了五種常見的整體閾值選取方法的性能。這五種方法是四元樹方法、矩量保持法、最大類間方差法、最大熵方法和簡單統計法。結果表明各種方法的性能不僅與所處理的圖像有關,而且也和所選用的准則有關。該文獻也指出,對於一般實時應用來說,可以選擇最大類間方差方法和簡單統計法。
最後,評價的目的是為了能指導、改進和提高分割,如何把評價和分割應用聯系起來尚有許多工作要做。一個可能的方法是結合人工智慧技術,建立分割專家系統[45],以有效的利用評價結果進行歸納推理,從而把對圖像的分割由目前比較盲目的試驗階段推進到系統地實現的階段。
⑼ 尋找灰度圖象分割閾值的matlab程序,結果不對,不知道問題在哪
a=imread('YuChu.bmp');
如果讀入的是彩色圖,需要用a=rgb2gray(a);轉換為灰度圖
加了這句我運行了下,程序沒出現錯誤也能出圖
另外matlab圖像處理工具箱中用level
=
graythresh(I)函數去閾值,其方法與你的方法一致,都是Otsu方法
補充:
你看看a讀入時數據的大小,要是3維的話就是RGB圖像了,需要轉一下
另外是程序錯誤還是結果不對?
⑽ 如何看待微軟新開源的LightGBM
作者:柯國霖
鏈接:https://www.hu.com/question/51644470/answer/130946285
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
10/19/2017 更新:
完整的更新列表可以參考: Microsoft/LightGBM/Key-Events.md
下面列出一些比較大的更新
R-package 已完成
缺失值(missing value)的自動處理
類別特徵(Categorical Feature) 的進一步優化,不再使用類似one-hot coding的分割方式。對於類別數量很多的類別特徵,使用one-vs-other的切分方式會長出很不平衡的樹,不能實現較好的精度。這是樹模型在支持類別特徵的一個痛點。 LightGBM可以找出類別特徵的最優切割,即many-vs-many的切分方式。並且最優分割的查找的時間復雜度可以在線性時間完成,和原來的one-vs-other的復雜度幾乎一致。
完成了python-package,歡迎使用。
直接支持類別特徵(Categorical Feature),不需要進行0/1展開。相對0/1展開的解決方案,速度快非常多,且精度一致。
Pre-sorted 演算法需要的內存約是訓練數據的兩倍(2 * #data * #features
* 4Bytes),它需要用32位浮點來保存 feature value,並且對每一列特徵,都需要一個額外的排好序的索引,這也需要32位的存儲空間。對於 histogram 演算法,則只需要(#data
* #features * 1Bytes)的內存消耗,僅為 pre-sorted演算法的1/8。因為 histogram 演算法僅需要存儲 feature
bin value (離散化後的數值),不需要原始的 feature value,也不用排序,而 bin
value 用 uint8_t (256
bins) 的類型一般也就足夠了。在計算上的優勢則主要體現在「數據分割」。決策樹演算法有兩個主要操作組成,一個是「尋找分割點」,另一個是「數據分割」。從演算法時間復雜度來看,Histogram 演算法和 pre-sorted 演算法在「尋找分割點」的代價是一樣的,都是O(#feature*#data)。而在「數據分割」時,pre-sorted 演算法需要O(#feature*#data),而 histogram 演算法是O(#data)。因為 pre-sorted 演算法的每一列特徵的順序都不一樣,分割的時候需要對每個特徵單獨進行一次分割。Histogram演算法不需要排序,所有特徵共享同一個索引表,分割的時候僅需對這個索引表操作一次就可以。(更新: 這一點不完全正確,pre-sorted 與 level-wise 結合的時候,其實可以共用一個索引表(row_idx_to_tree_node_idx)。然後在尋找分割點的時候,同時操作同一層的節點,省去分割的步驟。但這樣做的問題是會有非常多隨機訪問,有很大的chche miss,速度依然很慢。)。
另一個計算上的優勢則是大幅減少了計算分割點增益的次數。對於一個特徵,pre-sorted 需要對每一個不同特徵值都計算一次分割增益,而 histogram 只需要計算 #bin (histogram 的橫軸的數量) 次。
最後,在數據並行的時候,用 histgoram 可以大幅降低通信代價。用 pre-sorted 演算法的話,通信代價是非常大的(幾乎是沒辦法用的)。所以 xgoobst 在並行的時候也使用 histogram 進行通信。
cf: NIPS 2017 有什麼值得關注的亮點?
12/17/2016 更新:
大多數機器學習工具都無法直接支持類別特徵作為輸入,一般需要轉換成多維0/1特徵,帶來計算和內存上的額外消耗。LightGBM增加了針對於類別特徵的決策規則,這在決策樹上也很好實現。主要的思想是,在對類別特徵計算分割增益的時候,不是按照數值特徵那樣由一個閾值進行切分,而是直接把其中一個類別當成一類,其他的類別當成另一類。這實際上與0/1展開的效果是一樣的。
---------------------------------------
正好開源了一個月,強答一下。
GBDT 雖然是個強力的模型,但卻有著一個致命的缺陷,不能用類似 mini batch 的方式來訓練,需要對數據進行無數次的遍歷。如果想要速度,就需要把數據都預載入在內存中,但這樣數據就會受限於內存的大小;如果想要訓練更多的數據,就要使用外存版本的決策樹演算法。雖然外存演算法也有較多優化,SSD 也在普及,但在頻繁的 IO 下,速度還是比較慢的。
為了能讓 GBDT 高效地用上更多的數據,我們把思路轉向了分布式 GBDT, 然後就有了 LightGBM。設計的思路主要是兩點,1. 單個機器在不犧牲速度的情況下,盡可能多地用上更多的數據;2.
多機並行的時候,通信的代價盡可能地低,並且在計算上可以做到線性加速。
基於這兩個需求,LightGBM 選擇了基於 histogram 的決策樹演算法。相比於另一個主流的演算法 pre-sorted(如 xgboost 中的 exact 演算法),histogram 在內存消耗和計算代價上都有不少優勢。
當然, histogram 演算法也有缺點,它不能找到很精確的分割點,訓練誤差沒有 pre-sorted 好。但從實驗結果來看, histogram 演算法在測試集的誤差和 pre-sorted 演算法差異並不是很大,甚至有時候效果更好。實際上可能決策樹對於分割點的精確程度並不太敏感,而且較「粗」的分割點也自帶正則化的效果。
在 histogram 演算法之上, LightGBM 進行進一步的優化。首先它拋棄了大多數 GBDT 工具使用的按層生長
(level-wise) 的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise) 演算法。 level-wise 過一次數據可以同時分裂同一層的葉子,容易進行多線程優化,不容易過擬合。但實際上level-wise是一種低效的演算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷。因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂。leaf-wise則是一種更為高效的策略,每次從當前所有葉子中,找到分裂增益最大(一般也是數據量最大)的一個葉子,然後分裂,如此循環。因此同 level-wise 相比,在分裂次數相同的情況下,leaf-wise 可以降低更多的誤差,得到更好的精度。leaf-wise 的缺點是可能會長出比較深的決策樹,產生過擬合。因此 LightGBM 在leaf-wise 之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合。
另一個比較巧妙的優化是 histogram 做差加速。一個容易觀察到的現象:一個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到。通常構造直方圖,需要遍歷該葉子上的所有數據,但直方圖做差僅需遍歷直方圖的 k 個桶。利用這個方法,LightGBM 可以在構造一個葉子的直方圖後,可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提升一倍。
如需要更多的細節,可以參考github上的文檔:https://github.com/Microsoft/LightGBM/wiki/Features