光照不均勻圖像分割技巧1——分塊閾值

2021-03-02 新機器視覺

前言
  在數字圖像處理中,圖像分割是很關鍵的一步,當圖像質量較好,光照很均勻的時候只需用全局閾值的方法就能很完美地完成圖像分割任務,但是有些時候會遇到光照不均勻的現象,這個時候就需要用一些技巧才能達到比較好的分割效果,本文要介紹的是一種通過分塊閾值進行分割的方法。

實例
  在進入正題之前,我們先看一個實例,下面圖1和圖3為做硬幣面額識別拍攝的,可以看到,由於硬幣表面的反光以及打光角度的原因,圖片存在嚴重的光照不均現象。 
  如果對兩幅圖像直接進行全局閾值可以得到圖2和圖4的結果,可以看到分割的效果很差,比如第一幅,右上角的光照要強一些,而且右上角的硬幣存在一定的反光,灰度值整體偏高,導致最後分割效果很差。第二幅則是左邊部分光照太強,左邊的硬幣分割效果很差。 
  本文將用分塊閾值的方法解決這一問題。 

                           
        圖1 光照不均勻圖像1              圖2 全局閾值處理結果 

                      
             圖3 光照不均勻圖像2        圖4 全局閾值處理結果 

分塊閾值思路


  通過將圖像分割成若干塊,分別進行閾值分割,可以在一定程度上解決光照或反射造成的不均勻影響。選擇的塊要足夠小,以便每個塊的光照都近似均勻的,這樣自動閾值時,在高灰度區域就會用高閾值分割,在低灰度區域就會用低閾值分割。 
  圖5為分塊結果,示例中分塊與硬幣大小相當,分完塊之後就可以按塊進行全局閾值法(這裡採用常用的最大類間方差法,otsu法)處理了,但是需要注意的是有的塊中只有背景,這個時候需要進行判斷,排除對這種塊的處理。 
  對於這種塊的判斷,筆者嘗試過用otsu方法中提到的可分性度量: 


   筆者在計算出各個塊的可分性度量之後,發現區分效果並不是很好,後來通過分析最大類間方差法,有個想法就是用分割閾值處的類間平均灰度差判斷圖像塊的可分性,當圖像中只有背景或只有物體時,由於灰度值比較接近,則用otsu法算出的「背景」和「前景」平均灰度差(類間灰度差)會很小,類間平均灰度差 Δm 的數學表達式如下: 

  如圖5中各塊標註的文字所示,T為分割閾值,d為類間平均灰度差,可以看到當塊中只有背景時,平均灰度差與有物體時相差很大,選取特徵區分效果很好。本示例中,選灰度差20就能將兩種不同的塊很好的區分開。 

 


圖5 分塊情況

  之後僅對既有物體又有背景的塊進行自動閾值處理、二值化、填充孔洞,可以得到圖6的結果,可以看到每個硬幣都被很好的分割出來 

 圖6 分塊閾值處理結果

代碼
%功能:對一副圖像進行分塊閾值,可解決光照不均分割不足的問題%通過判斷類間灰度差以排除純背景或純物體的幹擾%作者:wikiwen%日期:2017/10/24%平臺:matlab R2014
clc,clear;close all;
rn=5;cn=5;I = rgb2gray(imread('d.jpg'));[R , C]=size(I);%分別返回行和列數rblk=R/rn;cblk=C/cn;%小塊的行數和列數x = 0:cblk:C;y = 0:rblk:R;M = meshgrid(x,y); %產生網格N = meshgrid(y,x); %產生網格imshow(I);hold onplot(x,N,'r'); %畫出水平橫線plot(M,y,'r'); %畫出垂直豎線
T = zeros(rn,cn);dif = zeros(rn,cn);J = false(R,C);%初始化二值圖X = uint8(zeros(rblk,cblk));%分塊閾值,並判斷類間灰度差以排除純背景或純物體的幹擾for r=1:rn for c=1:cn r0=rblk*(r-1)+1;r1=rblk*r; c0=cblk*(c-1)+1;c1=cblk*c; X = I(r0:r1,c0:c1); T(r,c) = graythresh(X); [h,~] = histcounts(X,0:255); T_int =uint8(T(r,c)*255); dif(r,c) = graydiffer(h,T_int);%計算類間灰度差的函數略
str = ['T=',num2str(T_int),' d=',num2str(dif(r,c))]; text(c0+cblk/4,r0+rblk/2,str,'color','black');%顯示信息 if dif(r,c)>20 J(r0:r1,c0:c1) = ~im2bw(X,T(r,c)); end endendJ = imfill(J,'holes');%填充孔洞figure;imshow(J);

%功能:計算一幅圖像前景和背景類間平均灰度差%輸入:直方圖數據h,分割閾值T%輸出:類間平均灰度差%作者:wikiwen%日期:2017/10/26function[differ] = graydiffer(h,T)    s1 = sum(h(1:T));    s2 = sum(h(T:255));    n1 = 1:T;    n2 = T:255;    u1 = double(n1)*h(1:T)' / s1; %背景灰度均值    u2 = double(n2)*h(T:255)' / s2; %前景灰度均值
differ = uint8(u2-u1);end

轉自:http://blog.csdn.net/kk55guang2/article/details/78475414

作者:wikiwen

相關焦點

  • 光照不均勻圖像分割技巧——分塊閾值
    前言  在數字圖像處理中,圖像分割是很關鍵的一步,當圖像質量較好,光照很均勻的時候只需用全局閾值的方法就能很完美地完成圖像分割任務,但是有些時候會遇到光照不均勻的現象,這個時候就需要用一些技巧才能達到比較好的分割效果,本文要介紹的是一種通過分塊閾值進行分割的方法。
  • 常用圖像閾值分割算法
    用數學表達式來表示,則可設原始圖像f(x,y),T為閾值,分割圖像時則滿足下式:                         按照閾值確定的來源,可以分成:人工經驗選擇法;直方圖方法;類間方差法;自適應閾值等。按照閾值確定中的運算範圍,可以分為全局閾值法,局部閾值法。
  • 基於OpenCV的圖像分割處理!
    圖像閾值化分割是一種傳統的最常用的圖像分割方法,因其實現簡單、計算量小、性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術。通常情況下對於色彩均衡的圖像,直接將閾值設為127即可,但有時圖像灰度級的分布是不均衡的,如果此時還將閾值設為127,那麼閾值處理的結果就是失敗的。所以需要找出圖像的最佳的分割閾值。OTSU就是獲得最佳閾值的方法。OTSU(大津法)是一種確定圖像二值化分割閾值的算法,由日本學者大津於1979年提出。
  • 圖像分割方法介紹及應用
    一、圖像分割方法介紹(一)基於閾值的分割方法灰度閾值分割法是一種最常用的並行區域技術,它是圖像分割中應用數量最多的一類。閾值分割方法實際上是輸入圖像f到輸出圖像g的如下變換:其中,T為閾值,對於物體的圖像元素,g(i,j)=1,對於背景的圖像元素,g(i,j)=0。
  • 經驗 | 圖像分割的實用技巧
    ,涵蓋數據增強、建模、損失函數、訓練技巧等多個方面,不失為一份可以參考的圖像分割技巧資料。圖像分割是圖像處理和計算機視覺的熱點之一,是根據圖像內容對指定區域進行標記的計算機視覺任務。它基於某些標準將輸入圖像劃分為多個相同的類別,簡言之就是「這張圖片裡有什麼,其在圖片中的位置是什麼?」以便提取人們感興趣的區域。圖像分割是圖像分析和圖像特徵提取及識別的基礎。
  • 【好設計論文】​一種改進的二維Otsu閾值分割算法
    圖像分割是將圖像劃分為一組子區,使得每個子區的內部都具有某種同質性、而任意兩個相鄰的子區間則不具備此種同質性的過程。它是涉及計算機視覺、圖像分析和模式識別等領域的重要研究內容[1],歷經數十年的發展,各類文獻中提出的圖像分割方法已經形成了複雜的譜系[2-3],閾值分割法是其中的一個分支,因其實現簡單、執行效率高而被廣泛運用。
  • 數字圖像處理中常用圖像分割算法有哪些?
    1.多數的圖像分割算法2.圖像邊緣分割3.圖像閾值分割4.基於區域的分割5.形態學分水嶺算法多數的圖像分割算法 均是基於灰度值的不連續和相似的性質。在前者中,算法以灰度突變為基礎分割一幅圖像,如圖像邊緣分割。假設圖像不同區域的邊界彼此完全不同,且與背景不同,從而允許基於灰度的局部不連續性來進行邊界檢測。
  • 基於圖像的目標區域分割算法研究
    1 OTSU算法研究  1.1 OTSU算法的閾值分割  OTSU最早是在1979年被提出來,藉助灰度直方圖,通過閾值的方式將圖像進行分類,然後計算各類之間的方差,選取使類間方差最大時閾值作為最優閾值。本文實驗的對象背景單一,只需要進行單閾值就能將目標區域從圖像中分割出來。
  • 快速圖像分割的SuperBPD方法
    利用這一特性將圖像分割成超像素點,這些超像素點是一種新的具有魯棒方向一致性的信息性超像素點,可以快速分組分割區域。在BSDS500和Pascal背景下的實驗結果證明了該算法在分割圖像時的準確性和效率。超級bpd在相鄰的超級bpd之間提供了魯棒的方向相似度,可以實現高效的圖像分割。本文提出了一種基於方向相似度的由粗分到精細的Super-BPD分割算法,在分割精度和分割效率之間取得了很好的平衡。
  • Python-OpenCV獲取圖像輪廓的圖像處理方法
    一、引言在《OpenCV閾值處理函數threshold處理32位彩色圖像的案例》介紹了threshold 函數,但threshold 的圖像閾值處理對於某些光照不均的圖像
  • 【動手學計算機視覺】第三講:圖像預處理之圖像分割
    非語義分割在圖像分割中所佔比重更高,目前算法也非常多,研究時間較長,而且算法也比較成熟,此類圖像分割目前的算法主要有以下幾種:閾值分割是圖像分割中應用最多的一類,該算法思想比較簡單,給定輸入圖像一個特定閾值,如果這個閾值可以是灰度值,也可以是梯度值,如果大於這個閾值,則設定為前景像素值,如果小於這個閾值則設定為背景像素值。
  • 一文概述用 python 的 scikit-image 模塊進行圖像分割
    = data.page()image_show(text)這個圖像有點暗,但我們仍然可以選擇一個值,它可以合理的分割圖像,而不需要用到任何先進的算法。一個理想的分割直方圖應該是有兩個峰值,且兩個峰值隔的較遠,以便我們可以選擇在這兩個峰值中間選擇一個數字作為閾值。現在,讓我們試著根據簡單的閾值法來分割圖像。有監督閾值因為閾值是我們自己選擇的,所以我們稱之為監督閾值。
  • 基於膚色分割結合模板匹配的人臉檢測改進方法解析
    為此,本文對基於膚色分割結合模板匹配的人臉檢測方法進行了改進,提出基於「光照預處理+膚色模型+模板匹配」的人臉檢測解決思路,即在光照預處理的前提下,利用膚色特徵建立膚色模型;根據膚色模型進行膚色檢測和閾值分割;在對分割區域特徵分析的基礎上,將篩選出的人臉候選區域與人臉模板相匹配
  • OpenCV-Python 圖像分割與Watershed算法|三十四
    然後你創建的屏障將返回你的分割結果。這就是Watershed背後的「思想」。你可以訪問Watershed的CMM網頁,了解它與一些動畫的幫助。但是這種方法會由於圖像中的噪聲或其他不規則性而產生過度分割的結果。因此OpenCV實現了一個基於標記的分水嶺算法,你可以指定哪些是要合併的山谷點,哪些不是。這是一個交互式的圖像分割。我們所做的是給我們知道的對象賦予不同的標籤。
  • 【Image J】圖像的背景校正
    答:無論是明場還是螢光場的圖像,都可能出現一定程度的光照不均勻。這種不均勻不僅影響圖像的美觀,而且也會影響對該圖像的測量分析(尤其是螢光圖像)。如下:這是一款Image j插件,儘管該插件僅能對8 bit圖像(灰度圖)進行背景校正,但是它的算法可以對圖像中的內容進行非常棒的邊界分割。這種分割效果,非常利於計數分析,如我們對密集細胞進行自動計數。
  • 零基礎學習OpenCV_圖像閾值
    圖像閾值threshold:固定閾值二值化ret, dst = cv2.threshold(src, thresh, maxval, type)對於每個像素,應用相同的閾值。如果像素值小於閾值,則將其設置為0,否則將其設置為最大值。函數cv.threshold用於應用閾值。第一個參數是源圖像,它應該是灰度圖像。第二個參數是閾值,用於對像素值進行分類。第三個參數是分配給超過閾值的像素值的最大值。OpenCV提供了不同類型的閾值,這由函數的第四個參數給出。
  • 圖像分割研究者的煩惱與未來
    這塊做的工作是不是很少,可能思考周期長且偏理論和偏應用的研究者交流不充分吧~2.知乎搜「圖像分割 組合優化」,只搜到叫獸一個比較系統的回答,其他都基本純DL,為致敬傳統算法,在講述圖像分割難點和未來前先貼下叫獸的回答~3.本渣心中較新較棒的融合傳統算法的seminar是Combinatorial Optimization in Machine Learning and Computer Vision
  • AI|圖像分割研究者的煩惱與未來
    圖像分割是CV領域的經典難題與熱點所在,了解圖像分割的發展、瓶頸與未來方向對CV研究有著重大意義。知乎搜「圖像分割 組合優化」,只搜到叫獸一個比較系統的回答,其他都基本純DL,為致敬傳統算法,在講述圖像分割難點和未來前先貼下叫獸的回答~當前主流的圖像分割研究方向都有哪些?
  • 基礎圖像處理-常用對比度調整方法(1)
    直方圖均衡化處理的「中心思想」是把原始圖像的灰度直方圖從比較集中的某個灰度區間變成在全部灰度範圍內的均勻分布。直方圖均衡化就是對圖像進行非線性拉伸,重新分配圖像像素值,使一定灰度範圍內的像素數量大致相同。直方圖均衡化就是把給定圖像的直方圖分布改變成「均勻」分布直方圖分布。
  • 深度學習中的圖像分割:方法和應用
    圖像分割是計算機視覺中的一個關鍵過程。它包括將視覺輸入分割成片段以簡化圖像分析。片段表示目標或目標的一部分,並由像素集或「超像素」組成。圖像分割將像素組織成更大的部分,消除了將單個像素作為觀察單位的需要。