999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenCV的圖像閾值分割研究與實現

2013-04-12 00:00:00雷建鋒汪偉
現代電子技術 2013年24期

摘 要: 圖像的閾值化在圖像分割中有著至關重要的作用。在OpenCV 算法環境下,運用固定閾值化和自適應閾值化算法,分別對同一幅圖調用OpenCV 中相應的函數進行處理;同時針對圖像中的噪聲,結合高斯模糊算法對圖像噪聲的濾除作用,將高斯模糊和閾值化算法結合起來,分析研究圖像分割算法。結果表明自適應閾值化算法可以更有效地進行圖像分割。

關鍵字: OpenCV; 自適應閾值; 圖像分割; 固定閾值

中圖分類號: TN919?34; TP32 文獻標識碼: A 文章編號: 1004?373X(2013)24?0073?04

Research and implementation of image threshold segmentation based on OpenCV

LEI Jian?feng, WANG Wei

(Capital Medical University, Beijing 100069, China)

Abstract:The image threshold plays a very important role in image segmentation. In the OpenCV algorithm environment, the fixed threshold algorithm and adaptive threshold algorithm are emploied respectively to process the same image by calling the corresponding function in OpenCV. The noise in the image is eliminated in combination with the filtering function of Gauss fuzzy algorithm. The image segmentation algorithm was analyzed by means of Gauss fuzzy and thresholding algorithm. The results show that the adaptive threshold algorithm can perform image segmentation more efficiently.

Keyword: OpenCV; adaptive threshold; image segmentation; fixed threshold

1 OpenCV簡介

OpenCV是一種開源的軟件,采用基于C/C++語言編寫,OpenCV可以在多種操作系統上運行同時為其他軟件提供了多種接口。在數據類型上OpenCV提供了多種基本數據類型。雖然這些數據類型在C語言中不是基本類型,但結構都很簡單,可將它們作為原子類型。OpenCV 主體分為5個模塊,其中4個模塊如圖1所示。

圖1 OpenCV基本結構圖

OpenCV的目標是為計算機視覺提供基本工具,在處理計算機視覺中一些很復雜的問題時,可以利用OpenCV提供的高層函數有效地解決這些問題。OpenCV有一個強大的函數庫,它可以提供基本函數為大多數計算機視覺問題創建一個完整解決方案。

2 圖像分割

圖像分割[1]是圖像分析中很重要的基礎環節,只有準確地將對象從圖像中提取出來,才能進一步對該對象做定量的描繪。圖像分割又是比較困難的環節,因為在許多情況下,對象與背景之間很難區分。所以圖像分割算法已經成為圖像處理[2]和分析領域中研究的熱點,并且到目前為止沒有一種通用的分割算法對各種圖像均能得到滿意的分割結果。圖像分割的準則實質是將一幅圖像分成幾幅子圖像,并且滿足3個條件:

(1)圖像中的每一個像素必須被歸入某一子圖像,并只能屬于一個子圖像;

(2)屬于同一子圖像的像素在某種性質上是相近的;

(3)屬于不同子圖像的像素在該性質上相差很大。所謂性質指的是如灰度、灰度梯度、紋理以及空間位置等。因此,圖像分割的過程也就是按性質對像素進行分類和識別。

圖像分割[3]方法一般有2類:

(1)基于邊界分割方法,這種方法通過子圖像之間一般都有明顯的邊界。假設圖像中只有2個子圖像,子圖像不存在多個互不連通的區域;

(2)基于閾值方法,這種方法首先根據像素的某個特征確定分割閾值,然后將像素的這個特征值與此分割閾值相比較,并以此決定將該像素歸入哪一類子圖像。通常將像素的灰度作為特征來選擇閾值。

2.1 VC6.0下OpenCV的安裝及環境搭配

(1)下載OpenCV安裝程序(1.0版本)。假如要將OpenCV安裝到C:\Program Files\OpenCV。在安裝時選擇“將\OpenCV\bin加入系統變量”。或安裝完成后手動添加環境變量“C:\Program Files\OpenCV\bin”。

(2)啟動VC++ 6.0,菜單Tools?>Options?>Directories:先設置lib路徑,選擇Library files,在下方填入路徑: C:\Program Files\OpenCV\lib然后選擇include files,在下方填入路徑:

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\cvaux\include

C:\Program Files\OpenCV\ml\include

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\include

(3)每創建一個將要使用OpenCV的VC Project,都需要給它指定需要的lib。菜單:Project?>Settings,然后將Setting for選為All Configurations,然后選擇右邊的link標簽,在Object/library modules附加上:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib如果不需要這么多lib,你可以只添加你需要的lib。

2.2 利用OpenCV進行圖像閾值分割

閾值分割是傳統的圖像分割方法,因其實現簡單,性能較穩定而成為圖像分割中最基本和應用最廣泛的分割技術[4]。它適用于目標和背景有不同灰度級范圍的圖像,而且總可以得到封閉且連通區域的邊界。

2.2.1 閾值分割的概念

閾值分割法是一種基于區域的圖像分割技術,其基本原理是:通過設定不同的特征閾值,把圖像象素點分為若干類[5]。通常將像素的灰度作為特征來選擇閾值。首先設原始圖像為f(x,y),然后按照一定的準則f(x,y)中找到特征值T,將圖像分割為2個部分,分割后的圖像為: 若取b0=0(黑),b1=1(白),即為圖像二值化。該方法的特點是可以減少數據量,而且簡化了分析和處理步驟,因此該方法是進行圖像分析、特征提取與模式識別之前的必要的圖像預處理過程。圖像閾值化的目的是要按照灰度級,對像素集合進行一個劃分,使每個子集形成一個與現實景物相對應的區域,各個區域內部具有一致的屬性,而相鄰區域具有不同的屬性。這樣的劃分可以通過從灰度級出發選取一個或多個閾值來實現。

2.2.2 OpenCV實現閾值分割方法

OpenCV實現閾值分割方法[6]:

(1)固定閾值分割,在OpenCV中實現固定閾值分割的函數是cvThreshold(),函數 cvThreshold()對單通道數組應用固定閾值操作。其基本的思想是,給定一個數組和一個閾值,然后根據數組中的每個元素的是低于還是高于閾值而進行一些處理。

(2)自適應閾值分割,在OpenCV中實現自適應閾值分割的函數AdaptiveThreshold(),此函數有2種不同的自適應閾值方法。

2.2.3 基于MFC的OpenCV閾值分割的實現

OpenCV 庫是使用“IplImage”結構體來創建和處理圖像,在其庫函數中,最重要的結構體就是IplImage 結構,使用這種格式的特點是:可以比DIB 格式表示更多的圖像性質,而且可以更方便地存取圖像中的像素值[7]。定義該結構體變量時,需要用到函數cvCreateImage,定義方法如下:

IplImage *src=cvCreateImage(cvSize(800,600),IPL_DEPTH_16U,3);

在VC6.0 中新建MFC AppWizard(exe),添加支持OpenCV 的庫文件,如cxcore.lib cv.libml.lib cvaux.lib highgui.lib cvcam.lib 等,使得VC能夠調用OpenCV 的庫函數。

(1)固定閾值算法

OpenCV 中使用固定閾值對圖像進行二值化的函數是cvThreshold(),函數具體定義為:

Double cvThreshold(

CvArr* src,

CvArr* dst,

double threshold,

double max_value,

int threshold_type);

該函數的特點是只能處理8位或浮點灰度圖像。目標圖像必須與源圖像的類型一致。每個閾值類型threshold_type對應于一個特定的比較操作如表1所示,該比較操作在源圖像第i個像素(srci)和閾值(T)之間進行。根據源圖像的像素和閾值之間的關系,目標圖像的像素dsti 會被設置為0, srci 或者max_value。當threshold_type 被設置為CV_THRESH_BINARY 時,如果源圖像第i 個像素(srci)大于閾值T,則目標像素dsti 被設置為最大值max_value。否則目標像素dsti 被設置為0[8]。

表1 cvThreshold()中閾值類型選項和對應的操作

以下是本文測試基于MFC的OpenCV高斯模糊算法部分核心代碼:

//定義IplImage 結構體存放高斯模糊后的目標圖片

IplImage* pImg8uSmooth= NULL;

IplImage* pImg8u= NULL;

//建立3 通道圖像,圖像大小與輸入圖像的大小相同的IplImage 結構體

pImg8uSmooth = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U, 3);

//使用高斯模糊方法對輸入圖像進行濾波

cvSmooth( img, pImg8uSmooth,CV_GAUSSIAN,3,0,0);

//創建窗口,顯示高斯模糊后的圖像

cvvNamedWindow( \"Smooth Image\", 1 );

cvvShowImage( \"Smooth Image\", pImg8uSmooth);

以下是基于MFC 的OpenCV 固定閾值化算法部分核心代碼:

//建立IplImage 結構體存放圖片

IplImage* Thresholdimg=NULL;

//設定固定閾值為15(該值為參考值,實際測試程序時,可以根據具體程序設置為其他測試值)

double threshold = 15;

//設定閾值類型為CV_THRESH_BINARY

int threshold_type = CV_THRESH_BINARY;

//對上一步中進行過高斯模糊的圖像進行固定閾值化處理

cvCvtColor(pImg8uSmooth, Thresholdimg, CV_BGR2GRAY);

//固定閾值化處理

cvThreshold(Thresholdimg,It,threshold,255,threshold_type);

(2)自適應閾值算法

針對有很強照明和反射梯度的圖像,圖像中像素分布很不均勻,要想對圖像處理得到效果較好的二值化效果,很難通過某一個或者某幾個固定的閾值來實現。在這種情況下,需要根據梯度進行閾值化,于是便有了自適應閾值算法[9]。

自適應閾值算法是OpenCV 中的一種改進了的閾值化處理技術,使用的閾值本身就是一個變量,這種方法由函數cvAdaptiveThreshold()實現,其具體函數為:

Void cvAdaptiveThreshold(

CvArr* src,

CvArr* dst,

double max_val,

Int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,

Int threshold_type=CV_THRESH_BINARY,

Int block_size=3,

Double param1=5);

cvAdaptiveThreshold()有兩種不同的自適應閾值方法,可以用參數adaptive_method進行設置。在這兩種方法下,自適應閾值T(x,y)在每個像素點都不同。通過計算像素點周圍b×b區域加權平均,然后減去常數得到自適應閾值,b由參數block_size 指定,常參數由param1 指定。當adaptive_method = CV_ADAPTIVE_THRESH_MEAN_C 時,對區域所有像素平均加權;當adaptive_method=CV_ADAPTIVE_THRESH_GAUSSIAN_C時,區域中的(x,y)周圍像素根據高斯函數按照它們離中心的距離進行加權計算。最后參數threshold_type和表1中的一樣。

本方法對于有很強照明或反射梯度的圖像,需要根據梯度進行閾值化時,自適應閾值技術與其他技術相比就有很好的效果。本文是在adaptive_method=CV_ADAPTIVE_THRESH_GAUSSIAN_C時使用高斯模糊算法對輸入圖像進行去噪濾波,之后用cvAdaptiveThreshold ()函數對高斯濾波之后的圖像進行自適應閾值化處理。具體核心代碼如下:

//定義IplImage 結構體存放自適應閾值化后的目標圖片

IplImage* AdpThresholdimg=NULL;

//設定閾值類型為CV_THRESH_BINARY

int threshold_type = CV_THRESH_BINARY;

//設定自適應閾值方法為CV_ADAPTIVE_THRESH_MEAN_C 方法

int adaptive_method = CV_ADAPTIVE_THRESH_MEAN_C;

int block_size = 71;

//設置減去的常數值,以得到自適應閾值

double offset = 15;

//建立Iat 指針存放自適應閾值化處理后的圖像結構體,作為輸出圖像

Iat = cvCreateImage(cvSize(Igray?>width,Igray?>height),IPL_DEPTH_8U, 1);

// AdpThresholdimg 存放經過高斯模糊處理的圖像結構體,作為輸入圖像

AdpThresholdimg=cvCreateImage(cvGetSize(img),IPL_

DEPTH_8U, 1);

//進行自適應閾值化處理,

cvAdaptiveThreshold(AdpThresholdimg, Iat, 255, adaptive_method,

threshold_type, block_size, offset);

//創建窗口,顯示自適應閾值處理后的圖像

cvNamedWindow(\"Adaptive Threshold\",1);

cvShowImage(\"Adaptive Threshold\",Iat);

經過上述兩種算法處理的圖像如圖2~圖4所示。

圖2 原始圖

圖3 固定閾值分割

圖4 自適應閾值分割

3 結 語

本文介紹了基于OpenCV 的圖像處理并給出了實例,利用OpenCV 中的函數使圖像處理[10]問題變得很簡單,具有很強的實用價值,通過圖2和圖3的圖像處理后的效果,發現自適應閾值相較于固定閾值有著較好的特征提取效果。當使用固定閾值時,無法分割出圖像中需要的信息,而使用自適應閾值,可以有效地分割出圖像中的有用信息。

注:本文通訊作者為汪偉。

參考文獻

[1] 韓思奇,王蕾.圖像分割的閾值法綜述[J].系統工程與電子技術,24(6):91?94.

[2] 陳勝勇,劉盛.基于OpenCV 的計算機視覺技術實現[M].北京:科學出版社,2008.

[3] 黃春艷.圖像分割若干算法研究[D].開封:河南大學,2011.

[4] 趙春燕,閏長青,時秀芳.圖像分割綜述[J].中國科技信息,2009(7):41?43.

[5] 劉爽.圖象分割中閾值選取方法的研究及其算法實現[J].電腦知識與技術,2010(11):68?70.

[6] 周強.圖像分割算法研究[J].福建電腦,2009(3):27?35.

[7] 高秀娟.圖像分割的理論、方法及應用[D].長春:吉林大學,2012.

[8] 劉瑞禎,于仕琪.OpenCV 教程基礎篇[M].北京:北京航空航天大學出版社,2009.

[9] 蘇彥華.Visual C++數字圖像識別技術典型案例[M].北京:人民郵電出版社,2004.

[10] 楊金龍.圖像分割算法研究與實現[D].蘭州:西北師范大學,2011.

主站蜘蛛池模板: 久久一色本道亚洲| 福利国产微拍广场一区视频在线| 精品自窥自偷在线看| 欧美在线综合视频| 亚洲男人天堂久久| 国产成人亚洲精品蜜芽影院| 亚洲欧洲日韩久久狠狠爱| 国产亚洲精久久久久久无码AV| 欧美区日韩区| 国产成在线观看免费视频| 波多野结衣中文字幕一区| 成人在线第一页| 亚洲第一香蕉视频| 亚洲精品视频网| 伊人久久大香线蕉成人综合网| 乱系列中文字幕在线视频 | 丁香亚洲综合五月天婷婷| 亚洲国产欧洲精品路线久久| 欧美日韩另类国产| 国产亚洲视频播放9000| 中文字幕无码制服中字| 四虎影视永久在线精品| 久久亚洲美女精品国产精品| 欧美日本在线观看| 香蕉国产精品视频| 无码AV日韩一二三区| 午夜福利视频一区| 亚洲男女在线| 中文字幕欧美日韩| 亚洲无线观看| 国产精品成人一区二区不卡| 亚洲永久精品ww47国产| 超薄丝袜足j国产在线视频| 99re热精品视频中文字幕不卡| 亚洲午夜18| 国产黄在线观看| 亚洲综合精品香蕉久久网| 久久精品国产91久久综合麻豆自制| 华人在线亚洲欧美精品| 成人午夜网址| 影音先锋亚洲无码| 色噜噜狠狠色综合网图区| 亚洲综合片| 国产高清无码麻豆精品| 久久a级片| 色偷偷一区二区三区| 久久久久久久久亚洲精品| 国产第一页亚洲| 国产精品视频猛进猛出| 综合色在线| 免费看a级毛片| 国产精品久久久久久影院| 香蕉视频国产精品人| 中文字幕不卡免费高清视频| 思思热在线视频精品| 91久久国产综合精品女同我| 欧洲成人在线观看| 无码免费视频| 国产一区二区三区夜色| 亚洲成肉网| 亚洲精品天堂自在久久77| 精品国产成人av免费| 99re经典视频在线| 欧美精品高清| 亚洲天堂久久久| 亚洲AV无码一二区三区在线播放| 一本大道香蕉久中文在线播放| 久久精品66| 重口调教一区二区视频| 国产综合网站| 亚洲一区二区三区中文字幕5566| 国产午夜福利亚洲第一| 国产精品久久久免费视频| 精品黑人一区二区三区| 亚洲成人动漫在线观看| 国产成人精品视频一区视频二区| 国产午夜精品鲁丝片| 亚洲国产日韩视频观看| 深夜福利视频一区二区| a亚洲天堂| 69视频国产| 中文字幕在线看|