版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
書目
.1梯度、邊緣和角點
o1.1Sobel
o1.2Laplace
o1.3Canny
o1.4PreCornerDetect
o1.5CornerEigenValsAndVecs
o1.6CornerMinEigenVal
o1.7CornerHarris
o1.8FindCornerSubPix
o1.9GoodFeaturesToTrack
?2采樣、插值和幾何變換
o2.1InitLinelterator
o2.2SampleLine
o2.3GetRectSubPix
o2.4GetQuadrangleSubPix
o2,5Resize
o2.6WarpAffine
o2.7GetAffineTransform
o2.82DRotationMatrix
o2.9WarpPerspective
o2.10WarpPerspectiveQMatcix
o2.11GetPerspectiveTransform
o2.12Remap
o2.13LogPolar
.3形態(tài)學操作
o3.1CreateStructuringElementEx
o3,2ReleaseStructuringElement
o3,3Erode
o3.4Dilate
o3.5MorphologyEx
.4濾波器與色調(diào)空間變換
o4,1Smooth
o4.2Filter2D
o4.3CopyMakeBocder
o4.4Integral
o4,5CvtColor
o4.6Threshold
o4.1AdaptiveThreshold
.5金字塔及其應用
o5.1PyrDown
o5.2PyrUp
?6連接部件
o6.1CvConnectedComp
o6.2FloodFill
o6.3FindContours
o6.4StartFindContours
o6.5FindNextContour
o6.6SubstituteContour
o6.1EndFindContours
o6.8PyrSegmentation
o6.9PyrMeanShiftFiltering
o6.10Watershed
?7圖像與輪廓矩
o7.1Moments
o7.2GetSpatialMoment
o7.3GetCentralMoment
o7.4GetNormalizedCentralMoment
o7.5GetHuMoments
.8特別圖像變換
o8.1HoughLines
o8.2HoughCircles
o8.3DistTransform
o8.4Inpaint
?9直方圖
o9.1CvHistogram
o9.2CreateHist
o9.3SetHistBinRanges
o9.4ReleaseHist
o9.5ClearHist
o9.6MakeHistHeaderForArray
o9.7QueryHistValueID
o9.8GetHistValueID
o9.9GetMinMaxHistValue
o9.10NormalizeHist
o9.11ThreshHist
o9.12CompareHist
o9.13CopyHist
o9.14CalcHist
o9.15CalcBackProject
o9.16CalcBackProjectPatch
o9.17CalcProbDensity
o9.18EqualizeHist
?10匹配
o10.1MatchTemplate
o10.2MatchShapes
o10.3CalcEMD2
李梯度、邊緣和角點
Sobel
運用擴展Sobel算子計算一階、二階、三階或混合圖像差分
voidcvSobel(constCvArr*src,CvArr*dst,intxorder,intyorder,int
aperture_size=3);
src
輸入圖像.
dst
輸出圖像.
xorder
X方向上的差分階數(shù)
yorder
y方向上的差分階數(shù)
aperture_size
擴展Sobel核的大小,必需是1,3,5或7o除了尺寸為1,其它狀
況下,aperture_sizeXaperture_size可分別內(nèi)核將用來計算差分。
對aperture_size=l的狀況,運用3x1或1x3內(nèi)核(不進行高斯平
滑操作)。這里有一個特別變量CV_SCHARR(=-1),對應3x3Scharr濾
波器,可以給出比3x3Sobel濾波應精確的結(jié)果。Scharr濾波器系數(shù)是:
--303'
-10010
-303
對x-方向或矩陣轉(zhuǎn)置后對y-方向。
函數(shù)cvSobel通過對圖像用相應的內(nèi)核進行卷積操作來計算圖像差分:
^xorder-k-yorderc
dst?y)
^j^xorderyorder
由于Sobel算子結(jié)合了Gaussian平滑和微分,所以,其結(jié)果或多或少對噪聲
有肯定的魯棒性。通常狀況,函數(shù)調(diào)用采納如下參數(shù)(xorder=l,yorder=0,
aperture_size=3)或(xorder=0,yorder=l,aperture_size=3)來計算一階
x-或y-方向的圖像差分。第一種狀況對應:
-101
-202
-101」核。
其次種對應:
'—1—2—1-
000
121
或者
I21'
000
-1-2-1
核的選則依靠于圖像原點的定義(origin來自Ipllmage結(jié)構(gòu)的定義)。由于該
函數(shù)不進行圖像尺度變換,所以和輸入圖像(數(shù)組)相比,輸出圖像(數(shù)組)的元素
通常具有更大的肯定數(shù)值(譯者注:即像素的位深)。為防止溢出,當輸入圖像
是8位的,要求輸出圖像是16位的。當然可以用函數(shù)cvConvertScale或
cvConvertScaleAbs轉(zhuǎn)換為8位的。除了8-位圖像,函數(shù)也接受32-位浮點
數(shù)圖像。全部輸入和輸出圖像都必需是單通道的,并且具有相同的圖像尺寸或者
R0I尺寸。
Laplace
計算圖像的Laplacian變換
voidcvLaplace(constCvArr*src,CvArr*dst,intaperture_size=3);
src
輸入圖像.
dst
輸出圖像.
aperture_size
核大?。ㄅccvSobel中定義一樣).
函數(shù)cvLaplace計算輸入圖像的Laplacian變換,方法是先用sobel算子計
算二階x-和y-差分,再求和:
cPsrc(Psrc
質(zhì)£出切=與+療
對aperture_size=l則給出最快計算結(jié)果,相當于對圖像采納如下內(nèi)核做卷積:
010
1-41
010
類似于cvSobel函數(shù),該函數(shù)也不作圖像的尺度變換,所支持的輸入、輸出圖
像類型的組合和cvSobel一樣。
Canny
采納Canny算法做邊緣檢測
voidcvCanny(constCvArr*image,CvArr*edges,doub1ethresholdl,
doublethreshold2,intaperture_size=3);
image
單通道輸入圖像.
edges
單通道存儲邊緣的輸出圖像
thresholdl
第一個閾值
threshold2
其次個閾值
aperture_size
Sobel算子內(nèi)核大小(見cvSobel).
函數(shù)cvCanny采納CANNY算法發(fā)覺輸入圖像的邊緣而且在輸出圖像中標識這
些邊緣。thresholdl和threshold2當中的小閾值用來限制邊緣連接,大的閾值
用來限制強邊緣的初始分割。
?留意事項:cvCanny只接受單通道圖像作為輸入。
?外部鏈接:經(jīng)典的canny自調(diào)整閾值算法的一個opencv的實現(xiàn)見在
OpenCV中自適應確定canny算法的分割門限
PreCornerDetect
計算用于角點檢測的特征圖,
voidcvPreCornerDetect(constCvArr*image,CvArr*corners,int
aperture_size=3);
image
輸入圖像.
corners
保存候選角點的特征圖
aperture_size
Sobel算子的核大小(見cvSobel).
函數(shù)cvPreCornerDetect計算函數(shù)
+DjDXX—2DXDyDXy
其中D表示一階圖像差分,回表示二階圖像差分。角點被認為是函數(shù)的局部
最大值:
//假設圖像格式為浮點數(shù)
IplImage*corners=cvClonelmage(image);
IplImage*dilatedcorners=cvClonelmage(image);
IplImage*corner_mask=cvCreatelmage(cvGetSize(image),8,1);
cvPreCornerDetect(image,corners,3);
cvDilate(corners,dilated_corners,0,1);
cvSubS(corners,dilated_corners,corners);
cvCmpS(corners,0,corner_mask,CVCMPGE);
cvReleaselmage(fecorners);
cvReleaselmage(&dilated_corners);
CornerEigenValsAndVecs
計算圖像塊的特征值和特征向量,用于角點檢測
voidcvCornerEigenValsAndVecs(constCvArr*image,CvArr*eigenvv,
intblock_size,intaperture_size=3);
image
輸入圖像.
eigenvv
保存結(jié)果的數(shù)組。必需比輸入圖像寬6倍。
block_size
一鄰域大小(見探討).
aperture_size
Sobel算子的核尺寸(見cvSobel).
對每個象素,函數(shù)cvCornerEigenValsAndVecs考慮blocksizeXblocksize
大小的鄰域S(p),然后在鄰域上計算圖像差分的相關(guān)矩陣]
借
〃
產(chǎn)E
藥21
S小?
加
世
”?
-£ps)產(chǎn)
而
電
P)
然后它計算矩陣的特征值和特征向量,并且按如下方式(入1,入2,xl,yl,x2,
y2)存儲這些值到輸出圖像中,其中
入1,X2-M的特征值,沒有排序
(xl,yl)-特征向量,對XI
(x2,y2)-特征向量,對入2
CornerMinEigenVal
計算梯度矩陣的最小特征值,用于角點檢測
voidcvCornerMinEigenVal(constCvArr*image,
CvArr*eigenval,intblock_size,intaperture_size=3);
image
輸入圖像.
eigenval
保存最小特征值的圖像.與輸入圖像大小一樣
block_size
鄰域大小(見探討cvCornerEigenValsAndVecs).
aperture_size
Sobel算子的核尺寸(見cvSobel).當輸入圖像是浮點數(shù)格式時,該參數(shù)
表示用來計算差分固定的浮點濾波器的個數(shù).
函數(shù)cvCornerMinEigenVal與cvCornerEigenValsAndVecs類似,但是它僅僅
計算和存儲每個象素點差分相關(guān)矩陣的最小特征值,即前一個函數(shù)的min(XI,
入2)
CornerHarris
哈里斯(Harris)角點檢測
voidcvCornerHarris(constCvArr*image,CvArr*harris_responce,
intblock_size,intaperture_size=3,doublek=0.04);
image
輸入圖像。
harris_responce
存儲哈里斯(Harris)檢測responces的圖像。與輸入圖像等大。
blocksize
鄰域大小(見關(guān)于cvCornerEigenValsAndVecs的探討)。
aperture_size
擴展Sobel核的大小(見cvSobel)o格式.當輸入圖像是浮點數(shù)格式
時,該參數(shù)表示用來計算差分固定的浮點濾波器的個數(shù)。
k
harris檢測器的自由參數(shù)。參見下面的公式。
函數(shù)cvCornerHarris對輸入圖像進行Harris邊界檢測。類似于
cvCornerMinEigenVal和cvCornerEigenValsAndVecso對每個像素,在
block_size^block_size大小的鄰域上,計算其2*2梯度共變矩陣(或相
關(guān)異區(qū)矩陣)Mo然后,將
det(M)-k^trace(M)2(這里2是平方)
保存到輸出圖像中。輸入圖像中的角點在輸出圖像中由局部最大值表示。
FindCornerSubPix
精確角點位置
voidcvFindCornerSubPix(constCvArr*image,CvPoint2D32f*corners,
intcount,CvSizewin,CvSizezero_zone,
CvTermCriteriacriteria);
image
輸入圖像.
corners
輸入角點的初始坐標,也存儲精確的輸出坐標
count
角點數(shù)目
win
搜尋窗口的一半尺寸。假如win=(5,5)那么運用5*2+1X5*2+1=11X
11大小的搜尋窗口
zero_zone
死區(qū)的一半尺寸,死區(qū)為不對搜尋區(qū)的中心位置做求和運算的區(qū)域。它是
用來避開自相關(guān)矩陣出現(xiàn)的某些可能的奇異性。當值為(T,T)表示沒
有死區(qū)。
criteria
求角點的迭代過程的終止條件。即角點位置的確定,要么迭代數(shù)大于某個
設定值,或者是精確度達到某個設定值。criteria可以是最大迭代數(shù)目,
或者是設定的精確度,也可以是它們的組合。
函數(shù)cvFindCornerSubPix通過迭代來發(fā)覺具有子象素精度的角點位置,或如圖
所示的放射鞍點(radialsaddlepoints)。
(red)gradientdirection
羅索工作室
KOS00.BET
子象素級角點定位的實現(xiàn)是基于對向量正交性的觀測而實現(xiàn)的,即從中心點q
到其鄰域點P的向量和P點處的圖像梯度正交(聽從圖像和測量噪聲)??紤]
以下的表達式:
ei=DIpiT?(q-pi)
其中,DIpi表示在q的一個鄰域點pi處的圖像梯度,q的值通過最小化ei得
到。通過將£i設為0,可以建立系統(tǒng)方程如下:
sumi(DIpi,DIpiT),q-sumi(DIpi,DIpiT,pi)=0
其中q的鄰域(搜尋窗)中的梯度被累加。調(diào)用第一個梯度參數(shù)G和其次個梯度
參數(shù)b,得到:
q=G-l,b
該算法將搜尋窗的中心設為新的中心q,然后迭代,直到找到低于某個閾值點的
中心位置。
GoodFeaturesToTrack
確定圖像的強角點
voidcvGoodFeaturesToTrack(constCvArr*image,CvArr*eig_image,CvArr*
temp_image,
CvPoint2D32f*corners,int*corner_count,
doublequality_level,doublemin_distance,
constCvArr*mask=NULL);
image
輸入圖像,8-位或浮點32-比特,單通道
eig_image
臨時浮點32-位圖像,尺寸與輸入圖像一樣
temp_image
另外一個臨時圖像,格式與尺寸與eig_image一樣
corners
輸出參數(shù),檢測到的角點
corner_count
輸出參數(shù),檢測到的角點數(shù)目
quality_level
最大最小特征值的乘法因子。定義可接受圖像角點的最小質(zhì)量因子。
min_distance
限制因子。得到的角點的最小距離。運用Euclidian距離
mask
R0I:感愛好區(qū)域。函數(shù)在R0I中計算角點,假如mask為NULL,則選擇
整個圖像。必需為單通道的灰度圖,大小與輸入圖像相同。mask對應的
點不為0,表示計算該點。
函數(shù)cvGoodFeaturesToTrack在圖像中找尋具有大特征值的角點。該函數(shù),首
先用cvCornerMinEigenVal計算輸入圖像的每一個象素點的最小特征值,并將
結(jié)果存儲到變量eig_image中。然后進行非最大值抑制(僅保留3x3鄰域中的
局部最大值)。下一步將最小特征值小于quality_level,max(eig_image(x,y))
解除掉。最終,函數(shù)確保全部發(fā)覺的角點之間具有足夠的距離,(最強的角點第
一個保留,然后檢查新的角點與已有角點之間的距離大于min_distance)。
采樣、插值和幾何變換
InitLinelterator
初始化線段迭代器
intcvInitLinelterator(constCvArr*image,CvPointptl,CvPointpt2,
CvLinelterator*line_iterator,int
connectivity=8);
image
帶采線段的輸入圖像.
ptl
線段起始點
pt2
線段結(jié)束點
line_iterator
一指向線段迭代器狀態(tài)結(jié)構(gòu)的指針
connectivity
被掃描線段的連通數(shù),4或8.
函數(shù)cvInitLinelterator初始化線段迭代器,并返回兩點之間的象素點數(shù)目。
兩個點必需在圖像內(nèi)。當?shù)鞒跏蓟?,連接兩點的光柵線上全部點,都可以
連續(xù)通過調(diào)用CV_NEXT_LINE_POINT來得到。線段上的點是運用4一連通或8—
連通利用Bresenham算法逐點計算的。
例子:運用線段迭代器計算彩色線上象素值的和
CvScalarsum_line_pixels(IplImagedimage,CvPointptl,CvPointpt2)
{
CvLinelteratoriterator;
intblue_sum=0,green_sum=0,red_sum=0;
intcount=cvInitLinelterator(image,ptl,pt2,feiterator,8);
for(inti=0;i<count;i++){
blue_sum+=iterator,ptr[0];
green_sum+=iterator,ptr[1];
red_sum+=iterator,ptr[2];
CV_NEXT_LINE_POINT(iterator);
/*printthepixelcoordinates:demonstrateshowtocalculatethe
coordinates*/
{
intoffset,x,y;
/*assumethatR0Iisnotset,otherwiseneedtotakeitinto
account.*/
offset=iterator,ptr-(uchar*)(image->imageData);
y=offset/image->widthStep;
x=(offset-y*image->widthStep)/(3^sizeof(uchar)/*sizeof
pixel*/);
printf(z/(%d,%d)\n〃,x,y);
)
}
returncvScalar(blue_sum,green_sum,red_sum);
}
Samp1eLine
將圖像上某一光柵線上的像素數(shù)據(jù)讀入緩沖區(qū)
intcvSampleLine(constCvArr*image,CvPointptl,CvPointpt2,
void*buffer,intconnectivity=8);
image
輸入圖像
ptl
光柵線段的起點
pt2
光柵線段的終點
buffer
存儲線段點的緩存區(qū),必需有足夠大小來存儲點max(|pt2.x-ptl.x|+l,
pt2.y-ptl.y|+l):8—連通狀況下,或者
|pt2,x-ptl.x|+lpt2.y-ptl.y|+l:4一連通狀況下.
connectivity
線段的連通方式,4or8.
函數(shù)cvSampleLine實現(xiàn)了線段迭代器的一個特別應用。它讀取由ptl和pt2
兩點確定的線段上的全部圖像點,包括終點,并存儲到緩存中。
GetRectSubPix
從圖像中提取象素矩形,運用子象素精度
voidcvGetRectSubPix(constCvArr*src,CvArr*dst,CvPoint2D32f
center);
src
輸入圖像.
dst
提取的矩形.
center
提取的象素矩形的中心,浮點數(shù)坐標。中心必需位于圖像內(nèi)部.
函數(shù)cvGetRectSubPix從圖像src中提取矩形:
dst(x,y)=src(x+center,x-(width(dst)T)*0.5,y+center,y一
(height(dst)-1)*0.5)
其中非整數(shù)象素點坐標采納雙線性插值提取。對多通道圖像,每個通道獨立單獨
完成提取。盡管函數(shù)要求矩形的中心肯定要在輸入圖像之中,但是有可能出現(xiàn)矩
形的一部分超出圖像邊界的狀況,這時,該函數(shù)復制邊界的模識(hunnish:即用
于矩形相交的圖像邊界線段的象素來代替矩形超越部分的象素)。
GetQuadrangleSubPix
提取象素四邊形,運用子象素精度
voidcvGetQuadrangleSubPix(constCvArr*src,CvArr*dst,constCvMat*
map_matrix);
src
輸入圖像.
dst
提取的四邊形.
map_matrix
3X2變換矩陣[A[b](見探討).
函數(shù)cvGetQuadrangleSubPix以子象素精度從圖像src中提取四邊形,運用子
象素精度,并且將結(jié)果存儲于dst,計算公式是:
dst{x+width{dst)/2,y+height{dst)/2)=src{Anx+Ai2y+421x+
A22y+th)
其中A和b均來自映射矩陣(譯者注:A,b為幾何形變參數(shù)),映射矩陣為:
..141412人
map.niatrix=..,
其中在非整數(shù)坐標A1(Gy),+b的象素點值通過雙線性變換得到。當函
數(shù)須要圖像邊界外的像素點時,運用重復邊界模式(replicationbordermode)
復原出所需的值。多通道圖像的每一個通道都單獨計算。
例子:運用cvGetQuadrangleSubPix進行圖像旋轉(zhuǎn)
ttinclude〃cv.h〃
ttinclude"highgui.h〃
ttinclude"math.h〃
intmain(intargc,char**argv)
{
IplImage*src;
/*thefirstcommandlineparametermustbeimagefilename*/
if(argc==2&&(src=cvLoadlmage(argv[1],-1))!=0)
IplImage*dst=cvClonelmage(src);
intdelta=1;
intangle=0;
cvNamedWindow(〃src〃,1);
cvShowImage(〃src〃,src);
for(;;)
floatm[6];
doublefactor=(cos(angle*CV_PI/180.)+L1)*3;
CvMatM=cvMat(2,3,CV32F,m);
intw=src->width;
inth=src->height;
m[0]=(float)(factor*cos(-angle*2*CV_PI/180.));
m[l]=(float)(factor*sin(-angle*2^CV_PI/180.));
m[2]=w*0.5f;
m[3]=-m[l];
m[4]=m[0];
m[5]=h*0.5f;
cvGetQuadrangleSubPix(src,dst,&M,1,cvScalarAll(0));
cvNamedWindow(〃dst〃,1);
cvShowImage(〃dst〃,dst);
if(cvWaitKey(5)==27)
break;
angle=(angle+delta)%360;
}
)
return0;
)
Resize
圖像大小變換
voidcvResize(constCvArr*src,CvArr*dst,int
interpo1ation=CV_INTER_LINEAR);
src
輸入圖像.
dst
輸出圖像.
interpolation
插值方法:
?CV」NTER_NN-最近鄰插值,
?CV_INTER_LINEAR-雙線性插值(缺省運用)
.CV_INTER_AREA-運用象素關(guān)系重采樣。當圖像縮小時候,該方法
可以避開水紋出現(xiàn)。當圖像放大時,類似于CVINTERNN方法..
?CV」NTER_CUBIC-立方插值.
函數(shù)cvResize將圖像src變更尺寸得到與dst同樣大小。若設定ROI,函數(shù)
將按常規(guī)支持ROI.
WarpAffine
對圖像做仿射變換
voidcvWarpAffine(constCvArr*src,CvArr*dst,constCvMat*map_matrix,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
輸入圖像.
dst
輸出圖像.
map_matrix
2X3變換矩陣
flags
插值方法和以下開關(guān)選項的組合:
.CV_WARP_FILL_OUTLIERS-填充全部輸出圖像的象素。假如部分象
素落在輸入圖像的邊界外,那么它們的值設定為fillval.
?CV_WARP_INVERSE_MAP-指定map_matrix是輸出圖像到輸入圖像
的反變換,因此可以干脆用來做象素插值。否則,函數(shù)從
map_matrix得到反變換。
fillval
用來填充邊界外面的值
函數(shù)cvWarpAffine利用下面指定的矩陣變換輸入圖像:
dst[x\y)<—src(x,y)
?假如沒有指定CV_WARP」NVERSE_MAP,
3,y')T=map.matrix?(z,y,1)T
?否則,
(ar,=map-niatrix-(a/,y',1)T
函數(shù)與cvGetQuadrangleSubPix類似,但是不完全相同。cvWarpAffine要求
輸入和輸出圖像具有同樣的數(shù)據(jù)類型,有更大的資源開銷(因此對小圖像不太合
適)而且輸出圖像的部分可以保留不變。而cvGetQuadrangleSubPix可以精確
地從8位圖像中提取四邊形到浮點數(shù)緩存區(qū)中,具有比較小的系統(tǒng)開銷,而且總
是全部變更輸出圖像的內(nèi)容。
要變換稀疏矩陣,運用cxcore中的函數(shù)cvTransform。
GetAffineTransform
由三對點計算仿射變換
CvMat*cvGetAffineTransform(constCvPoint2D32f*src,
constCvPoint2D32f*dst,CvMat*map_matrix);
src
輸入圖像的三角形頂點坐標。
dst
輸出圖像的相應的三角形頂點坐標。
map_matrix
指向2X3輸出矩陣的指針。
函數(shù)cvGetAffineTransform計算滿意以下關(guān)系的仿射變換矩陣:
(&,&,=mapjinatrix?(g,妨,1)「
這里,dst(Z)=(Vi,yy),src(i)=(x“,i=0..2.
2DRotationMatrix
計算二維旋轉(zhuǎn)的仿射變換矩陣
CvMat*cv2DRotationMatrix(CvPoint2D32fcenter,doubleangle,
doublescale,CvMat*map_matrix);
center
輸入圖像的旋轉(zhuǎn)中心坐標
angle
旋轉(zhuǎn)角度(度)。正值表示逆時針旋轉(zhuǎn)(坐標原點假設在左上角).
scale
各項同性的尺度因子
map_matrix
輸出2X3矩陣的指針
函數(shù)cv2DRotationMatrix計算矩陣:
[aB](1-a)^center,x-0*center,y]
[-8a|P*center,x+(1-a)^center,y]
wherea=scale*cos(angle),B=scale*sin(angle)
該變換并不變更原始旋轉(zhuǎn)中心點的坐標,假如這不是操作目的,則可以通過調(diào)整
平移量變更其坐標(譯者注:通過簡潔的推導可知,仿射變換的實現(xiàn)是首先將旋
轉(zhuǎn)中心置為坐標原點,再進行旋轉(zhuǎn)和尺度變換,最終重新將坐標原點設定為輸入
圖像的左上角,這里的平移量是center,x,center,y).
WarpPerspective
對圖像進行透視變換
voidcvWarpPerspective(constCvArr*src,CvArr*dst,constCvMat*
map_matrix,
int
flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
輸入圖像.
dst
輸出圖像.
map_matrix
3X3變換矩陣
flags
插值方法和以下開關(guān)選項的組合:
?CV_WARP_FILL_OUTLIERS-填充全部縮小圖像的象素。假如部分象
素落在輸入圖像的邊界外,那么它們的值設定為fillval.
?CV_WARP_INVERSE_MAP-指定matrix是輸出圖像到輸入圖像的反
爰換,因此可以干脆用來做象素插值。否則,函數(shù)從map,matrix
得到反變換。
fillval
用來填充邊界外面的值
函數(shù)cvWarpPerspective利用下面指定矩陣變換輸入圖像:
dst(x,娟)<—S7'C(T,y)
?假如沒有指定CV_WARP」NVERSE_MAP,
(rr,7/)=mapjinatrix?(i,y,1)
?否則,&y)'=map_matrix■(T,y,l)r
要變換稀疏矩陣,運用cxcore中的函數(shù)cvTransform。
WarpPerspectiveQMatrix
用4個對應點計算透視變換矩陣
CvMat*cvWarpPerspectiveQMatrix(constCvPoint2D32f*src,
constCvPoint2D32f*dst,
CvMat*map_matrix);
src
輸入圖像的四邊形的4個點坐標
dst
輸出圖像的對應四邊形的4個點坐標
map_matrix
輸出的3X3矩陣
函數(shù)cvWarpPerspectiveQMatrix計算透視變換矩陣,使得:
(tix'i,tiy,i,ti)T=matrixe(xi,yi,1)T
其中dst(i)=(x,i,yi),src(i)=(xi,yi),i=0..3.
GetPerspectiveTransform
由四對點計算透射變換
CvMat*cvGetPerspectiveTransform(constCvPoint2D32f*src,const
CvPoint2D32f*dst,
CvMat*map_matrix);
ttdefinecvWarpPerspectiveQMatrixcvGetPerspectiveTransform
src
輸入圖像的四邊形頂點坐標。
dst
輸出圖像的相應的四邊形頂點坐標。
map_matrix
指向3X3輸出矩陣的指針。
函數(shù)cvGetPerspectiveTransform計算滿意以下關(guān)系的透射變換矩陣:
幻,=mapjniatrix?(g,%,1),
這里,dst{i)=(yi,yY),src(i)=(8,y),i=0..3.
Remap
對圖像進行一般幾何變換
voidcvRemap(constCvArr*src,CvArr*dst,
constCvArr*mapx,constCvArr*mapy,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
輸入圖像.
dst
輸出圖像.
mapx
x坐標的映射(32fClimage).
mapy
y坐標的映射(32fClimage).
flags
插值方法和以下開關(guān)選項的組合:
.CV_WARP_FILL_OUTLIERS-填充邊界外的像素.假如輸出圖像的部
分象素落在爰換后的邊界外,那么它們的值設定為fillvalo
fillval
用來填充邊界外面的值.
函數(shù)cvRemap利用下面指定的矩陣變換輸入圖像:
dst(x,y)<-src(mapx(x,y),mapy(x,y))
與其它幾何變換類似,可以運用一些插值方法(由用戶指定,譯者注:同
cvResize)來計算非整數(shù)坐標的像素值。
LogPolar
把圖像映射到極指數(shù)空間
voidcvLogPolar(constCvArr*src,CvArr*dst,
CvPoint2D32fcenter,doubleM,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
src
輸入圖像。
dst
輸出圖像。
center
變換的中心,輸出圖像在這里最精確。
M
幅度的尺度參數(shù),見下面公式。
flags
插值方法和以下選擇標記的結(jié)合
?CV_WARP_FILL_OUTLIERS-填充輸出圖像全部像素,假如這些點有和
外點對應的,則置零。
?CV_WARP_INVERSE_MAP-表示矩陣由輸出圖像到輸入圖像的逆變換,
異且因此可以干脆用于像素插值。否則,函數(shù)從map_matrix中找
尋逆變換。
fillval
用于填充外點的值。
函數(shù)cvLogPolar用以下變換變換輸入圖像:
正變換(CV_WARP」NVERSE_MAP未置位):
dst(phi,rho)<-src(x,y)
逆變換(CV_WARP_INVERSE_MAP置位):
dst(x,y)<-src(phi,rho),
這里,
rho=M*log(sqrt(x2+y2))
phi=atan(y/x)
此函數(shù)仿照人類視網(wǎng)膜中心凹視力,并且對于目標跟蹤等可用于快速尺度和旋轉(zhuǎn)
變換不變模板匹配。
Example.Log-polartransformation.
ttinclude<cv.h>
ttinclude<highgui.h>
intmain(intargc,char**argv)
{
IplImage*src;
if(argc==2&&(src=cvLoadImage(argv[l],1)!=0)
{
IplImageddst=cvCreatelmage(cvSize(256,256),8,3);
IplImage*src2=cvCreatelmage(cvGetSize(src),8,3);
cvLogPolar(src,dst,
cvPoint2D32f(src->width/2,src->height/2),
40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
cvLogPolar(dst,src2,
cvPoint2D32f(src->width/2,src->height/2),
40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP);
cvNamedWindow(〃log-polar〃,1);
cvShowImage("log-polar”,dst);
cvNamedWindow("inverselog-polar”,1);
cvShowImage("inverselog-polar”,src2);
cvWaitKey();
}
return0;
}
Andthisiswhattheprogramdisplayswhenopencv/samples/c/fruits.jpg
ispassedtoit
形態(tài)學操作
CreateStructuringElementEx
創(chuàng)建結(jié)構(gòu)元素
IplConvKernel*cvCreateStructuringElementEx(
intcols,introws,intanchor_x,intanchor_y,
intshape,int*values=NULL);
cols
結(jié)構(gòu)元素的列數(shù)目
rows
結(jié)構(gòu)元素的行數(shù)目
anchor_x
錨點的相對水平偏移量
anchor_y
錨點的相對垂直偏移量
shape
結(jié)構(gòu)元素的形態(tài),可以是下列值:
?CV_SHAPE_RECT,長方形元素;
?CV_SHAPE_CROSS,交織元素across-shapedelement;
.CV_SHAPE_ELLIPSE,橢圓元素;
.CV_SHAPE_CUSTOM,用戶自定義元素。這種狀況下參數(shù)values定義
了mask,即象素的那個鄰域必需考慮。
values
指向結(jié)構(gòu)元素的指針,它是一個平面數(shù)組,表示對元素矩陣逐行掃描。(非
零點表示該點屬于結(jié)構(gòu)元)。假如指針為空,則表示平面數(shù)組中的全部元
素都是非零的,即結(jié)構(gòu)元是一個長方形(該參數(shù)僅僅當shape參數(shù)是
CV_SHAPE_CUSTOM時才予以考慮)。
函數(shù)cvCreateStructuringElementEx安排和填充結(jié)構(gòu)IplConvKernel,它可
作為形態(tài)操作中的結(jié)構(gòu)元素。
ReleaseStructuringElement
刪除結(jié)構(gòu)元素
voidcvReleaseStructuringElement(IplConvKernel**element);
element
被刪除的結(jié)構(gòu)元素的指針
函數(shù)cvReleaseStructuringElement釋放結(jié)構(gòu)IplConvKernel。假如
*element為NULL,則函數(shù)不作用。
Erode
運用隨意結(jié)構(gòu)元素腐蝕圖像
voidcvErode(constCvArr*src,CvArr*dst,IplConvKernel*element=NULL,
intiterations=l);
src
輸入圖像.
dst
輸出圖像.
element
用于腐蝕的結(jié)構(gòu)元素。若為NULL,則運用3X3長方形的結(jié)構(gòu)元素
iterations
腐蝕的次數(shù)
函數(shù)cvErode對輸入圖像運用指定的結(jié)構(gòu)元素進行腐蝕,該結(jié)構(gòu)元素確定每個
具有最小值象素點的鄰域形態(tài):
dst=erode(src,element):dst(x,y)=min((x',y')in
element))src(x+x',y+y')
函數(shù)可能是本地操作,不需另外開拓存儲空間的意思。腐蝕可以重復進行
(iterations)次.對彩色圖像,每個彩色通道單獨處理。
Dilate
運用隨意結(jié)構(gòu)元素膨脹圖像
voidcvDilate(constCvArr*src,CvArr*dst,IplConvKernel*element=NULL,
intiterations=l);
src
輸入圖像.
dst
輸出圖像.
element
用于膨脹的結(jié)構(gòu)元素。若為NULL,則運用3X3長方形的結(jié)構(gòu)元素
iterations
膨脹的次數(shù)
函數(shù)cvDilate對輸入圖像運用指定的結(jié)構(gòu)元進行膨脹,該結(jié)構(gòu)確定每個具有最
小值象素點的鄰域形態(tài):
dst=dilate(src,element):dst(x,y)=max((x',y')in
element))src(x+x',y+y')
函數(shù)支持(in-place)模式。膨脹可以重復進行(iterations)次.對彩色圖像,
每個彩色通道單獨處理。
MorphologyEx
高級形態(tài)學變換
voidcvMorphologyEx(constCvArr*src,CvArr*dst,CvArr*temp,
IplConvKernel*element,intoperation,int
iterations=l);
src
輸入圖像.
dst
輸出圖像.
temp
臨時圖像,某些狀況下須要
element
結(jié)構(gòu)元素
operation
形態(tài)操作的類型:
CV_M0P_0PEN-開運算
CV_M0P_CL0SE-閉運算
CV_MOP_GRADIENT-形態(tài)梯度
CV_M0P_T0PHAT-"頂帽"
CV_MOP_BLACKHAT-〃黑帽”
iterations
膨脹和腐蝕次數(shù).
函數(shù)cvMorphologyEx在膨脹和腐蝕基本操作的基礎上,完成一些高級的形態(tài)變
換:
開運算
dst=open(src,element)=dilate(erode(src,element),element)
閉運算
dst=close(src,element)=erode(dilate(src,element),element)
形態(tài)梯度
dst=morph_grad(src,element)=dilate(src,element)-erode(src,eleme
nt)
〃頂帽〃
dst=tophat(src,element)=src-open(src,element)
dst=blackhat(src,element)=close(src,element)-src
臨時圖像temp在形態(tài)梯度以及對“頂帽”和“黑帽”操作時的in-place模
式下須要。
濾波器與色調(diào)空間變換
Smooth
各種方法的圖像平滑
voidcvSmooth(constCvArr*src,CvArr*dst,
intsmoothtype=CV_GAUSSIAN,
intparaml=3,intparam2=0,doubleparam3=0,double
param4=0);
src
輸入圖像.
dst
輸出圖像.
smoothtype
平滑方法:
?CV_BLUR_NO_SCALE(簡潔不帶尺度變換的模糊)-對每個象素的
paramlXparam2領(lǐng)域求和。假如鄰域大小是變更的,可以事先利
用函數(shù)cvlntegral計算積分圖像。
?CV_BLUR(simpleblur)-對每個象素paramlXparam2鄰域求和
并做尺度變換1/(paramleparam2).
?CVGAUSSIAN(gaussianblur)-對圖像進行核大小為
param1Xparam2的高斯卷積
?CVMEDIAN(medianblur)一對圖像進行核大小為paramlXparaml
的中值濾波(i.e.鄰域是方的).
?CV_BILATERAL(雙向濾波)-應用雙向3x3濾波,彩色
sigma=paraml,空間sigma=param2.關(guān)于雙向濾波,可參考
param1
平滑操作的第一個參數(shù).
param2
平滑操作的其次個參數(shù).對于簡潔/非尺度變換的高斯模糊的狀況,假如
param2的值為零,則表示其被設定為paraml。
param3
對應高斯參數(shù)的Gaussiansigma(標準差).假如為零,則標準差由下面
的核尺寸計算:
sigma=(n/2-1)*0.3+0.8,其中n=paraml對應水平核,
n=param2對應垂直核.
對小的卷積核(3X3to7X7)運用如上公式所示的標準sigma速度會快。假
如param3不為零,而paraml和param2為零,則核大小有sigma計算
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)灌溉水電設施管理與維護規(guī)定
- 焊接作業(yè)環(huán)境適應性分析與改善策略
- 高一化學教案:專題第二單元第一課時乙醇
- 2024屆南安市中考化學對點突破模擬試卷含解析
- 2024高中化學第五章進入合成有機高分子化合物的時代3功能高分子材料課時作業(yè)含解析新人教版選修5
- 2024高中地理課時作業(yè)6流域的綜合開發(fā)-以美國田納西河流域為例含解析新人教版必修3
- 2024高中語文開學第一課學生觀后感范文700字少年強中國強素材
- 2024高中語文第二單元置身詩境緣景明情賞析示例春江花月夜學案新人教版選修中國古代詩歌散文欣賞
- 2024高中語文精讀課文一第1課3侍奉皇帝與走向人民作業(yè)含解析新人教版選修中外傳記蚜
- 2024高考化學一輪復習第十章化學實驗基礎第一講化學實驗常用儀器和基本操作規(guī)范演練含解析新人教版
- 2024年突發(fā)事件新聞發(fā)布與輿論引導合同
- 地方政府信訪人員穩(wěn)控實施方案
- 小紅書推廣合同范例
- 商業(yè)咨詢報告范文模板
- AQ 6111-2023個體防護裝備安全管理規(guī)范知識培訓
- 老干工作業(yè)務培訓
- 基底節(jié)腦出血護理查房
- 高中語文《勸學》課件三套
- 人教版八年級物理-第二章:聲現(xiàn)象復習完整課件
- 直播代運營服務合同范本版
- 2024年江蘇蘇州中考數(shù)學試卷及答案
評論
0/150
提交評論