標籤:des style class blog code http
使用映像結構中所定義的高層處理方法(圖形和視覺範疇)來完成特定任務
平滑處理 cvSmooth
處理後映像與輸入映像的大小相同(不用考慮邊緣)
中值濾波 CV_MEDIAN 不支援 in place 操作 , 高斯濾波 CV_GAUSSIAN 支援 in place 操作(可以設定高斯核不對稱,雙邊濾波——高斯平滑,水彩畫處理,可用於映像分割)
映像形態學
膨脹 —— 把二值映像各像素串連成分的邊界擴大一層,填充邊緣或像素內部的孔;使灰階映像高亮地區逐漸增長
腐蝕 —— 把二值映像各像素串連成分的邊界點去掉從而縮小一層(去掉毛刺);使灰階映像高亮區減少
cvErode cvDilate
自訂核 IplConvKernel —— cvCreateStructuringElementEx()函數建立 ,由 cvReleaseStructuringElement() 函數釋放
形態核與卷積核不同,不需要任何的數值填充核
更通用的形態學 —— cvMorphologyEx —— 開閉運算,形態梯度,禮帽,黑帽
開運算 —— 先腐蝕然後膨脹 (可用來統計二值映像中的地區數)
閉運算 —— 先膨脹然後腐蝕 —— 對於連通地區分析,通常先採用腐蝕或閉運算來消除純粹由雜訊引起的部分,然後用開運算來串連相鄰的地區
閉運算消除了低於其臨近點的孤立點,開運算消除了高於其臨近點的孤立點
形態學梯度 = 膨脹 - 腐蝕 —— 對二值映像進行這一操作可將團塊的邊緣突出出來(描述映像亮度變化的劇烈程度)
禮帽 Top Hat = src – open(src) (開運算帶來的結果是放大裂縫或是局部低亮度地區,所以禮帽操作將局部亮度極大點分割出來)
黑帽 Black Hat = close(src) – src 黑色的洞被分割出來
漫水填充演算法 —— 標記或分離映像的一部分以便對其進行進一步處理
在映像上選擇一個種子點,然後把臨近地區所有相似點填充上同樣的顏色,漫水填充的結果總是某個連續的地區
cvFloodFill 可設定掩碼,cvFloodFill 不會覆蓋mask的非0像素點 flags —— 演算法的連通性,填充掩碼映像的值,CV_FLOODFILL_FIXED_RANGE
映像尺寸調整 —— cvResize 如果源圖象設定了ROI,cvResize 將會對ROI地區調整尺寸,以匹配靶心圖表像,若靶心圖表像設定了ROI,那麼。。。。(可以選擇不同的插值方式)
影像金字塔 —— 連續降採樣
cvPyrDown —— 先用高斯核卷積,然後刪除所有偶數行和偶數列 —— 丟失一定量資訊
cvPyrUp —— 映像首先在每個維度上擴大為原來的兩倍,新增的行列以0填充,然後給指定的濾波器進行卷積
映像分割 —— 快速初始分割先在金字塔高層的低解析度映像上完成,然後逐層對分割加以最佳化 —— cvPyrSegmentation
由於影像金字塔各層的長和寬都必須是整數,所以起始映像的長和寬都能夠被2整除,並且能夠被2整除的次數不少於金字塔的總層數
CvMemStorage * storage = cvCreateMemStorage()
#include <cv.h>#include <highgui.h>int main(int argc,char** argv){ IplImage *src=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_UNCHANGED); IplImage *dst=cvCreateImage(cvSize(src->width,src->height),src->depth,src->nChannels); CvMemStorage* storage=cvCreateMemStorage(0); CvSeq* comp=NULL; cvPyrSegmentation(src,dst,storage,&comp,4,200,50); int n_comp=comp->total; for (int i=0;i<n_comp;i++) { CvConnectedComp* cc=(CvConnectedComp*)cvGetSeqElem(comp,i); // ..... 怎麼處理還沒想好 } cvReleaseMemStorage(&storage); return 0;}
CvConnectedComponent —— 映像團塊
area 地區面積,value 地區顏色的平均值,rect 是一個地區的外接矩形,contour 是一個指向另一個序列的指標
閾值化
cvThreshold
cvAdaptiveThreshold 大津法,OTSU —— 按映像的灰階特性,將映像分成背景和目標2部分,背景和目標之間的類間方差越大,說明構成映像的的2部分的差別越大,當部分目標錯為背景或反之都會使2部分差別變小
#include <cv.h>#include <highgui.h>#include <math.h>IplImage *Igray=0, *It=0,*Iat;int main(int argc,char** argv){ int adaptive_method=CV_ADAPTIVE_THRESH_GAUSSIAN_C; int threshold_type=CV_THRESH_BINARY; int block_size=9; double offset=5; Igray=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_GRAYSCALE); Iat=cvCreateImage(cvSize(Igray->width,Igray->height),IPL_DEPTH_8U,1); cvAdaptiveThreshold(Igray,Iat,255,adaptive_method,threshold_type,block_size,offset); cvNamedWindow("w1"); cvNamedWindow("w2"); cvShowImage("w1",Iat); cvShowImage("w2",Igray); cvWaitKey(); cvReleaseImage(&Iat); cvDestroyAllWindows(); return 0;}