2019年6月5日 星期三

s1051771 作業5

作業5數學型態影像處理應用 Morphological Image  Processing

請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中 圍棋個數。




圖一


圖二



圖三



一.原理

将图像转为灰阶,然后用otsu法二值化,再用数学形态学对图像进行处理,最后用findContours()和contours.size()计算出棋子个数。


二.实现

<1>threshold

C++: double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)


参数:
src:原图像。
dst:结果图像。
thresh:当前阈值。
maxVal:最大阈值,一般为255.
thresholdType:阈值类型,主要有下面几种:

 THRESH_BINARY:二进制阈值,。在运用该阈值类型的时候,先要选定一个特定的阈值量,比如:125,这样,新的阈值产生规则可以解释为大于125的像素点的灰度值设定为最大值255,灰度值小于125的像素点的灰度值设定为0。  (value>threshold?255:0)\

THRESH_ BINARY _INV:反二进制阈值。设定一个初始阈值如125,则大于125的设定为0,而小于该阈值的设定为255。  (value>threshold?0:255)


 THRESH _TRUNC:截断阈值。同样首先需要选定一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。(例如:阈值选取为125,那小于125的阈值不改变,大于125的灰度值(230)的像素点就设定为该阈值)。   (value>threshold?threshold:value)


 THRESH _TOZERO:阈值化为0。先选定一个阈值,像素点的灰度值大于该阈值的不进行任何改变;像素点的灰度值小于该阈值的,其灰度值全部变为0。   (value>threshold?value:0)      
THRESH _TOZERO _INV:反阈值化为0。原理类似于0阈值,但是在对图像做处理的时候相反,即:像素点的灰度值小于该阈值的不进行任何改变,而大于该阈值的部分,其灰度值全部变为0。  (value>threshold?0:value)

<2> getStructuringElement  (获取结构化元素)

 

Mat getStructuringElement(int shape, 
                          Size ksize,//核大小
                          Point anchor=Point(-1,-1) //核中心位置,默认位于形状中心处
                          );

第一个参数shape:
MORPH_RECT:矩形
MORPH_CROSS :十字形
MORPH_ELLIPSE :椭圆形

第二个参数ksize:结构性元素的大小 默认为Size( 3,3) 

第三个参数Point anchor:核中心位置,默认位于形状中心处



<3>morphologyEx[简单用法]

morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );


本次用morphologyEx(src,dst,op,kernel);
 op:
MORPH_OPEN – 开运算(Opening operation)
MORPH_CLOSE – 闭运算(Closing operation)
MORPH_GRADIENT - 形态学梯度(Morphological gradient)
MORPH_TOPHAT - 顶帽(Top hat)
MORPH_BLACKHAT - 黑帽(Black hat)

kernel:
使用

kernel = getStructuringElement()获取自定义的kernel

<4>erode()和dilate()【简单用法】

erode(src,dst,kernel);

dilate(sec,dst,kernel);用法同上



<5>运行

图一:

 

 图二:

 

图三:

 

 

误差分别为: 0   -3   -1

 

 

沒有留言:

張貼留言