基於分水嶺算法的圖像分割-Matlab版本

2022-02-03 算法工程師的學習日誌

簡介

分水嶺算法是一種圖像區域分割法,分割的過程中將圖片轉化為灰度圖,然後將灰度值看作是海拔,然後向較低點注水,這種基於地形學的解釋,我們著重考慮三種點:

1)極小值點,該點對應一個盆地的最低點,當我們在盆地裡滴一滴水的時候,由於重力作用,水最終會匯聚到該點。注意:可能存在一個最小值面,該平面內的都是極小值點。

2)盆地的其它位置點,該位置滴的水滴會匯聚到局部最小點。

3)盆地的邊緣點,是該盆地和其它盆地交接點,在該點滴一滴水,會等概率的流向任何一個盆地。

明白上述三種點之後,我們開始往盆地的極小值點注水,然後隨著注水的深入,每一個極小值點慢慢的向外擴展,然後知道兩個盆地的水匯合,匯合處就是我們需要的分水嶺。

從下圖可以直觀理解一下,首先這三塊區域都含有極小值點

然後逐漸填充就能獲得分水嶺(即分界線)

得到分界線就能完成圖像分割

代碼實現

clear, close all;clc;%1.讀取圖像並求取圖像的邊界。 rgb = imread('1.png');%讀取原圖像I = rgb2gray(rgb);%轉化為灰度圖像figure; subplot(121)%顯示灰度圖像imshow(I)text(732,501,'Image courtesy of Corel','FontSize',7,'HorizontalAlignment','right')hy = fspecial('sobel');%sobel算子,應用sobel算子銳化圖像hx = hy';Iy = imfilter(double(I), hy, 'replicate');%濾波求y方向邊緣Ix = imfilter(double(I), hx, 'replicate');%濾波求x方向邊緣gradmag = sqrt(Ix.^2 + Iy.^2);%求摸subplot(122); imshow(gradmag,[]), %顯示梯度title('Gradient magnitude (gradmag)') %2. 直接使用梯度模值進行分水嶺算法:(往往會存在過的分割的情況,效果不好) L = watershed(gradmag);%直接應用分水嶺算法Lrgb = label2rgb(L);%轉化為彩色圖像figure; imshow(Lrgb), %顯示分割後的圖像title('Watershed transform of gradient magnitude (Lrgb)')%過分割現象 %3.分別對前景和背景進行標記:本例中使用形態學重建技術對前景對象進行標記,首先使用開操作,開操作之後可以去掉一些很小的目標。%開和閉這兩種運算可以除去比結構元素小的特定圖像細節,同時保證不產生全局幾何失真。%開運算可以把比結構元素小的突刺濾掉,切斷細長搭接而起到分離作用;%閉運算可以把比結構元素小的缺口或孔填充上,搭接短的間斷而起到連接作用。se = strel('disk', 20);%圓形結構元素,STREL('disk',R,N),R is the specified radius, When N is greater than 0, the disk-shaped structuring                       %element is approximated by a sequence of NIo = imopen(I, se);%形態學開操作figure; subplot(121)imshow(Io), %顯示執行開操作後的圖像title('Opening (Io)')Ie = imerode(I, se);%對圖像進行腐蝕,基本參數:待處理的輸入圖像以及結構元素對象Iobr = imreconstruct(Ie, I);%形態學重建subplot(122); imshow(Iobr), %顯示重建後的圖像title('Opening-by-reconstruction (Iobr)')Ioc = imclose(Io, se);%形態學關操作,首先膨脹,然後腐蝕,兩個操作使用同樣的結構元素figure; subplot(121)imshow(Ioc), %顯示關操作後的圖像title('Opening-closing (Ioc)')Iobrd = imdilate(Iobr, se);%對圖像進行膨脹,基本參數:待處理的輸入圖像和結構元素對象。Iobrcbr = imreconstruct(imcomplement(Iobrd), ...    imcomplement(Iobr));%形態學重建Iobrcbr = imcomplement(Iobrcbr);%圖像求反subplot(122); imshow(Iobrcbr), %顯示重建求反後的圖像,figure4title('Opening-closing by reconstruction (Iobrcbr)')%As you can see by comparing Iobrcbr with Ioc, %reconstruction-based opening and closing are more %effective than standard opening and closing at removing %small blemishes without affecting the overall %shapes of the objects. Calculate the regional maxima %of Iobrcbr to obtain good foreground markers. fgm = imregionalmax(Iobrcbr);%局部極大值figure; imshow(fgm), %顯示重建後局部極大值圖像,figure5title('Regional maxima of opening-closing by reconstruction (fgm)')I2 = I; %前景標記圖與原圖疊加I2(fgm) = 255;%局部極大值處像素值設為255figure; imshow(I2), %在原圖上顯示極大值區域,figure6title('Regional maxima superimposed on original image (I2)')se2 = strel(ones(5,5));%結構元素fgm2 = imclose(fgm, se2);%關操作fgm3 = imerode(fgm2, se2);%腐蝕fgm4 = bwareaopen(fgm3, 20);%開操作I3 = I;I3(fgm4) = 255;%前景處設置為255figure; subplot(121)imshow(I3)%顯示修改後的極大值區域,figure7title('Modified regional maxima')bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%轉化為二值圖像subplot(122); imshow(bw), %顯示二值圖像,figure7title('Thresholded opening-closing by reconstruction') %4. 進行分水嶺變換並顯示:
DL = watershed(Iobrcbr);%分水嶺變換figureimshow(DL)title('分水嶺')labels = imdilate(DL==0,ones(3,3));I4 = labeloverlay(I,labels);figureimshow(I4)title('分水嶺邊界線')
%% % 將標籤矩陣顯示為彩色圖像。標籤矩陣Lrgb = label2rgb(DL,'jet','w','shuffle');figureimshow(Lrgb)title('分水嶺Label')%%figureimshow(I)hold onhimage = imshow(Lrgb);himage.AlphaData = 0.2; % 使用透明方式將此偽顏色標籤矩陣疊加到原始強度圖像上title('彩色Label')

相關焦點

  • 基於圖像的目標區域分割算法研究
    [8]算最早是Digabel和Lantuejoul等人將其引入數字圖像處理,該算法是一種基於數學形態學的分割方法。改進的算法重點考慮如何很好的解決圖像過分割現象。研究發現,基於標記理論的分水嶺算法能有效抑制過分割現象。與傳統的分水嶺算法相比,該算法預先標記極小值(像素)點,較好的抑制了圖像過分割。從本質上看,是利用一種先驗知識來解決過度分割的問題。
  • 基於K-means聚類算法的MATLAB圖像分割
    K-means算法在每次迭代中都要考察每個樣本的分類是否正確,若不正確,則需要調整。K-means聚類算法簡捷,具有很強的搜索力,適合處理數據量大的情況,在數據挖掘和圖像處理領域中得到了廣泛的應用。採用K-means進行圖像分割,將圖像的每個像素點的灰度或者RGB作為樣本(特徵向量),因此整個圖像構成了一個樣本集合(特徵向量空間),從而把圖像分割任務轉換為對數據集合的聚類任務。
  • 數字圖像處理中常用圖像分割算法有哪些?
    1.多數的圖像分割算法2.圖像邊緣分割3.圖像閾值分割4.基於區域的分割5.形態學分水嶺算法多數的圖像分割算法 均是基於灰度值的不連續和相似的性質。在前者中,算法以灰度突變為基礎分割一幅圖像,如圖像邊緣分割。假設圖像不同區域的邊界彼此完全不同,且與背景不同,從而允許基於灰度的局部不連續性來進行邊界檢測。
  • 最全綜述 | 圖像分割算法
    所謂圖像分割是指根據灰度、彩色、空間紋理、幾何形狀等特徵把圖像劃分成若干個互不相交的區域,使得這些特徵在同一區域內表現出一致性或相似性,而在不同區域間表現出明顯的不同。簡單的說就是在一副圖像中,把目標從背景中分離出來。對於灰度圖像來說,區域內部的像素一般具有灰度相似性,而在區域的邊界上一般具有灰度不連續性。
  • 基於閾值處理的圖像分割算法!
    圖像處理Author:louwillMachine Learning Lab     基於閾值的圖像分割因其處理直觀、實現簡單和計算速度快,是一種更為常用的傳統圖像分割算法。本文基於圖像灰度閾值處理的基本原理,對全局閾值處理方法和大津法進行介紹,並用一些圖像實例進行展示。
  • OpenCV-Python 圖像分割與Watershed算法|三十四
    目標在本章中,我們將學習使用分水嶺算法實現基於標記的圖像分割我們將看到:cv.watershed()理論任何灰度圖像都可以看作是一個地形表面,其中高強度表示山峰,低強度表示山谷。你開始用不同顏色的水(標籤)填充每個孤立的山谷(局部最小值)。隨著水位的上升,根據附近的山峰(坡度),來自不同山谷的水明顯會開始合併,顏色也不同。
  • Matlab實現圖像閾值分割(含代碼)
    使用matlab實現閾值分割,實現兩種方法,一是人工選擇閾值進行分割,而是自動選擇閾值進行分割。
  • 基於Sigma-IFCM分割算法的腦部MR圖像
    本文引用地址:http://www.eepw.com.cn/article/199482.htm在諸多的圖像分割算法中,模糊C均值(FCM)分割算法是目前應用最廣泛的分割算法之一。最早由Dunn提出,後經Bezdek改進。由於模糊集理論對圖像的不確定性有較好的描述能力,因此FCM算法在醫學圖像分割中取得了良好的分割效果。
  • 基於注意力機制改進U-Net的醫學圖像分割算法
    近年來,由於深度學習方法的迅速發展,基於深度學習的圖像分割算法在醫學圖像分割領域取得了顯著的成就。其中依賴於編碼器-解碼器體系結構的U-Net被研究人員廣泛使用。但是U-Net網絡在下採樣的過程中卷積、池化都是局部算子,要獲取全局信息就需要深度編碼器,這樣會引入大量的訓練參數,並且丟失更多圖像的空間信息。而在上採樣過程中使用反卷積、反池化很難進行空間信息的恢復。
  • 基於聚類的圖像分割-Python
    讓我們嘗試一種稱為基於聚類的圖像分割技術,它會幫助我們在一定程度上提高模型性能,讓我們看看它是什麼以及一些進行聚類分割的示例代碼。想像一下我們要過馬路,過馬路之前我們會做什麼?目標檢測 VS 圖像分割 圖像分割大致分為兩大類。
  • 【圖像隱藏】基於DWT與SVD算法實現數字水印嵌入提取附Matlab代碼
    1 簡介研究數字圖像版權保護問題,由於數字媒體在網上易被複製篡改.針對單純奇異值分解或小波變換水印算法均存在抵抗攻擊差的難題
  • 基於深度學習的語義分割綜述
    文獻中已經開發了許多圖像分割算法,從最早的方法,如閾值化、基於直方圖的方法、區域劃分、k-均值聚類、分水嶺,到更先進的算法,如活動輪廓、基於Graph的分割、馬爾可夫隨機場和稀疏方法。然而,在過去的幾年裡,深度學習網絡已經產生了新一代的圖像分割模型,其性能得到了顯著的提高——通常在流行的基準上達到了最高的準確率——這導致了許多人認為是該領域的範式轉變。
  • 常用圖像閾值分割算法
    下面對各種方法進行混合展示:第一類:全局閾值處理圖像閾值化分割是一種傳統的最常用的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術。它特別適用於目標和背景佔據不同灰度級範圍的圖像。難點在於如何選擇一個合適的閾值實現較好的分割。
  • 基於matlab的RBFNN的kmeans算法研究
    最後用層次聚類算法改進的kmeans算法在matlab中預設徑向基函數神經網絡,該網絡徑向基函數的數目、徑基函數的中心和寬度以及隱含層和輸出層之間的連接權值有算法的聚類結果確定,此方法徑向基函數神經 網絡的穩定性和高效性。
  • 基於OpenCV的圖像分割處理!
    圖像閾值化分割是一種傳統的最常用的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術。通常情況下對於色彩均衡的圖像,直接將閾值設為127即可,但有時圖像灰度級的分布是不均衡的,如果此時還將閾值設為127,那麼閾值處理的結果就是失敗的。所以需要找出圖像的最佳的分割閾值。OTSU就是獲得最佳閾值的方法。OTSU(大津法)是一種確定圖像二值化分割閾值的算法,由日本學者大津於1979年提出。
  • 總結|圖像分割5大經典方法
    主要分割方法有:基於閾值的分割方法https://www.cnblogs.com/wangduo/p/5556903.html閾值法的基本思想是基於圖像的灰度特徵來計算一個或多個灰度閾值,並將圖像中每個像素的灰度值與閾值相比較,最後將像素根據比較結果分到合適的類別中。
  • MATLAB圖像文件的操作
    MATLAB中的圖像處理工具箱提供了一套全方位的標準算法和圖形工具,用於進行圖像處理、分析、可視化和算法開發。
  • 【matlab圖像處理】圖像處理工具箱(1)
    本內容參考自《實用MATLAB圖像和視頻處理》第4章以及博客:https://blog.csdn.net/qq_42722197/article/details/118005631對於matlab的安裝,可以參考以下文章:圖像處理工具箱(Image Processing T
  • 腦部MR圖像的Sigma-IFCM分割算法分析
    在諸多的圖像分割算法中,模糊C均值(FCM)分割算法是目前應用最廣泛的分割算法之一。最早由Dunn提出,後經Bezdek改進。由於模糊集理論對圖像的不確定性有較好的描述能力,因此FCM算法在醫學圖像分割中取得了良好的分割效果。最早把FCM算法用於醫學腦部圖像分割的是LiC L等人。
  • 【圖像分割】基於GAC水平集方法實現圖像分割matlab 源碼
    收錄於話題 #圖像處理matlab源碼 327個內容