分水嶺演算法
❶ MATLAB 圖像分割的 分水嶺演算法 的源代碼,麻煩有的人發一份給我,謝謝
直方圖均衡化也是非線性量化的一種吧,網上找到的,作者寫的非常詳細。
% 數字圖像處理程序作業
% 本程序能將JPG格式的彩色圖像文件灰度化並進行直方圖均衡
%
% 輸入文件:PicSample.jpg 待處理圖像
% 輸出文件:PicSampleGray.bmp 灰度化後圖像
% PicEqual.bmp 均衡化後圖像
%
% 輸出圖形窗口說明
% figure NO 1 待處理彩色圖像
% figure NO 2 灰度化後圖像
% figure NO 3 直方圖
% figure NO 4 均衡化後直方圖
% figure NO 5 灰度變化曲線
% figure NO 6 均衡化後圖像
% 1, 處理的圖片名字要為 PicSample.jpg
% 2, 程序每次運行時會先清空workspace
% 作者;archiless lorder
clear all
%一,圖像的預處理,讀入彩色圖像將其灰度化
PS=imread('PicSample.jpg'); %讀入JPG彩色圖像文件
imshow(PS) %顯示出來 figure NO 1
title('輸入的彩色JPG圖像')
imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %將彩色圖片灰度化並保存
PS=rgb2gray(PS); %灰度化後的數據存入數組
figure,imshow(PS) %顯示灰度化後的圖像,也是均衡化前的樣品 figure NO 2
title('灰度化後的圖像')
%二,繪制直方圖
[m,n]=size(PS); %測量圖像尺寸參數
GP=zeros(1,256); %預創建存放灰度出現概率的向量
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %計算每級灰度出現的概率,將其存入GP中相應位置
end
figure,bar(0:255,GP,'g') %繪制直方圖 figure NO 3
title('原圖像直方圖')
xlabel('灰度值')
ylabel('出現概率')
%三,直方圖均衡化
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i); %計算Sk
end
end
S2=round(S1*256); %將Sk歸到相近級的灰度
for i=1:256
GPeq(i)=sum(GP(find(S2==i))); %計算現有每個灰度級出現的概率
end
figure,bar(0:255,GPeq,'b') %顯示均衡化後的直方圖 figure NO 4
title('均衡化後的直方圖')
xlabel('灰度值')
ylabel('出現概率')
figure,plot(0:255,S2,'r') %顯示灰度變化曲線 figure NO 5
legend('灰度變化曲線')
xlabel('原圖像灰度級')
ylabel('均衡化後灰度級')
%四,圖像均衡化
PA=PS;
for i=0:255
PA(find(PS==i))=S2(i+1); %將各個像素歸一化後的灰度值賦給這個像素
end
figure,imshow(PA) %顯示均衡化後的圖像 figure NO 6
title('均衡化後圖像')
imwrite(PA,'PicEqual.bmp');
❷ 有關分水嶺演算法的書
我以前在夢境之中去的就是分水嶺,那是把一個河流給分成兩條的牌嶺,我覺得非常奇怪,那個牌嶺橫跨一條河流,而另一條河流則流向他處,牌嶺兩邊都有一個地下通道樓梯口,看上去有些稀奇,不知拍零下為何物,不過牌嶺旁的油菜花也是非常了令人嚮往的,我覺得太COOL了,但要通向下面的樓梯時,就這樣結束了,非常遺憾沒有把它繼續下去,這是我夢境之中的分水嶺,然而你說的書可能是涉及一些關於把水分流的自然現象或者是說關於分水的另一種科學論斷。。。
❸ 如何處理分水嶺演算法中的過分割問題
克服分水嶺演算法過分割的方法_網路文庫
http://wenku..com/link?url=uZL4gmBQUc4mUH4WcixSFwsGd3yLF__
可以參考一下這個文章
❹ 分水嶺演算法的介紹
所謂分水嶺演算法有好多種實現演算法,拓撲學,形態學,浸水模擬和降水模擬等方式。要搞懂就不容易了。Watershed Algorithm(分水嶺演算法),顧名思義,就是根據分水嶺的構成來考慮圖像的分割。現實中我們可以或者說可以想像有山有湖的景象,那麼那一定是水繞 山,山圍水的情形。當然在需要的時候,要人工構築分水嶺,以防集水盆之間的互相穿透。而區分高山(plateaus)與水的界線,以及湖與湖之間的間隔或 都是連通的關系,就是我們可愛的分水嶺(watershed)。為了得到一個相對集中的集水盆,那麼讓水漲到都接近周圍的最高的山頂就可以了,再漲就要漏 水到鄰居了,而鄰居,嘿嘿,水質不同誒,會混淆自我的。那麼這樣的話,我們就可以用來獲取邊界灰階大,中間灰階小的物體區域了,它就是集水盆。
❺ MATLAB的分水嶺演算法
樓上的到處都是這句話,無敵了你
❻ 圖像分割中分水嶺演算法的流程是什麼我論文答辯要做10分鍾左右的講解,給的越多越好,謝謝
分水嶺演算法的概念及原理
分水嶺分割方法,是一種基於拓撲理論的數學形態學的分割方法,其基本思想是把圖像看作是測地學上的拓撲地貌,圖像中每一點像素的灰度值表示該點的海拔高度,每一個局部極小值及其影響區域稱為集水盆,而集水盆的邊界則形成分水嶺。分水嶺的概念和形成可以通過模擬浸入過程來說明。在每一個局部極小值表面,刺穿一個小孔,然後把整個模型慢慢浸入水中,隨著浸入的加深,每一個局部極小值的影響域慢慢向外擴展,在兩個集水盆匯合處構築大壩,即形成分水嶺。
分水嶺的計算過程是一個迭代標注過程。分水嶺比較經典的計算方法是L. Vincent提出的。在該演算法中,分水嶺計算分兩個步驟,一個是排序過程,一個是淹沒過程。首先對每個像素的灰度級進行從低到高排序,然後在從低到高實現淹沒過程中,對每一個局部極小值在h階高度的影響域採用先進先出(FIFO)結構進行判斷及標注。
分水嶺變換得到的是輸入圖像的集水盆圖像,集水盆之間的邊界點,即為分水嶺。顯然,分水嶺表示的是輸入圖像極大值點。因此,為得到圖像的邊緣信息,通常把梯度圖像作為輸入圖像,即
g(x,y)=grad(f(x,y))={[f(x,y)-f(x-1,y)]2[f(x,y)-f(x,y-1)]2}0.5
式中,f(x,y)表示原始圖像,grad{.}表示梯度運算。
分水嶺演算法對微弱邊緣具有良好的響應,圖像中的雜訊、物體表面細微的灰度變化,都會產生過度分割的現象。但同時應當看出,分水嶺演算法對微弱邊緣具有良好的響應,是得到封閉連續邊緣的保證的。另外,分水嶺演算法所得到的封閉的集水盆,為分析圖像的區域特徵提供了可能。
為消除分水嶺演算法產生的過度分割,通常可以採用兩種處理方法,一是利用先驗知識去除無關邊緣信息。二是修改梯度函數使得集水盆只響應想要探測的目標。
為降低分水嶺演算法產生的過度分割,通常要對梯度函數進行修改,一個簡單的方法是對梯度圖像進行閾值處理,以消除灰度的微小變化產生的過度分割。即
g(x,y)=max(grad(f(x,y)),gθ)
式中,gθ表示閾值。
程序可採用方法:用閾值限制梯度圖像以達到消除灰度值的微小變化產生的過度分割,獲得適量的區域,再對這些區域的邊緣點的灰度級進行從低到高排序,然後在從低到高實現淹沒的過程,梯度圖像用Sobel運算元計算獲得。對梯度圖像進行閾值處理時,選取合適的閾值對最終分割的圖像有很大影響,因此閾值的選取是圖像分割效果好壞的一個關鍵。缺點:實際圖像中可能含有微弱的邊緣,灰度變化的數值差別不是特別明顯,選取閾值過大可能會消去這些微弱邊緣。
❼ 分水嶺演算法的原理及相關思想的闡述是什麼
首先選擇最低的點,就是分水嶺中最底的山谷。
然後灌水:
1 . 極值點周圍的點也劃分到極值點,它們屬於一個區域。
2 . 在灌水的過程中根據你設定的閾值,還需要把有的區域合並。
3. 這個過程中有新的局部極值點產生,也是山谷,但不一定是最底的山谷。
最後灌滿了水之後,由起始的極值點形成了一個一個的區域。
❽ OpenCV 如何進行二值圖像的分水嶺演算法
沒用過。不過從程序看,處理彩色圖像先要轉成灰色圖像,處理完再轉回彩色。轉換函數是cvCvtColor(...),參數CV_BGR2GRAY 是RGB到grey, 參數 CV_GRAY2BGR 是grey 到RGB.
處理結果是彩色的,則轉灰色就是了:
cvCvtColor( inputImg, grayImg, CV_BGR2GRAY);
❾ MATLAB 分水嶺分割演算法
其實,這涉及到命令和演算法,單一的命令往往不能解決所有的問題,要有前處理或後處理,才能達到目的。另外,也說明,某個命令應該升級或更新了。所以,watershed這個命令,單用達不到所期望的效果,只有加上預處理才行。
❿ 分水嶺演算法的產生與發展過程
分水嶺的計算過程是一個迭代標注過程.分水嶺比較經典的計算方法是L.Vincent為消除分水嶺演算法產生的過度分割,通常可以採用兩種處理方法,一是利用先驗知識