實用計算機視覺 各種閾值化效果

2021-08-01 18:49:58 字數 2247 閱讀 6111

本實驗主要基於opencv來測試各種閾值化後效果,主要驗證最優閾值化、大津閾值化和自適應閾值化,並進行帶通閾值化和半閾值化的測試,測試如下:

左圖中第乙個大尖峰為黑色鉛筆和黑色物體的灰度分布,最後乙個大尖峰為圖中白色物體和硬幣的灰度分布,背景有乙個顯著的由暗到明的漸變過程。

首先基於之前博文中實現的最優閾值進行測試,最優閾值為122,效果如下:

原始中四個角落到**的背景漸變效應導致背景不能很好的分隔開。

int thre_value = computeoptimalth(gray_image, 0);

threshold(gray_image, bina_image, thre_value, 255, thresh_binary);

接下來進行大津閾值化(otsu thresholding)的測試,大津閾值化的思想是讓閾值t兩側的畫素分布最小,或者是同一類間的方差最小化,不同類間的方差最大化。

在使用大津閾值作為引數的情況下,opencv中的threshold函式會忽略傳入的閾值。

有時候僅用單一的閾值進行閾值化,往往效果不好,例如前面的最優閾值化和大津閾值化,這時候使用多重閾值進行操作能顯著提高分割效果,這就是自適應閾值化的工作。

自適應閾值化的思想是,首先將分割成多個子影象塊,對每個影象塊計算乙個單獨的閾值,對每個畫素基於最鄰近的四個閾值後的插值進行閾值化。

int blocksize = 9;

adaptivethreshold(gray_image, bina_image, 255,

adaptive_thresh_mean_c, thresh_binary, blocksize,0);

子影象塊的大小會直接影響閾值化後效果,下面是blocksize取9的效果(blocksize必須為奇數):

blocksize的大小分別取17,25的效果如下左右所示:

接下來在前面得到的最優閾值122左右進行帶通閾值化和半閾值化測試:

帶通閾值化常用於進行影象中物體邊界的大致確定,從字面上就知道要設定兩個不同的高低閾值進行兩次閾值操作,最後進行二值影象的與操作。

threshold(gray_image, bina_image1, thre_value-5, 255, thresh_binary);

threshold(gray_image, bina_image2, thre_value + 5, 255, thresh_binary_inv);

bitwise_and(bina_image1, bina_image2, bina_image);

閾值化後效果如下,閾值頻寬分別為10和20:

半閾值是在閾值t左右進行原始影象的部分保持的一種閾值化操作。

threshold(gray_image, bina_image1, thre_value, 255, thresh_binary);

bitwise_and(gray_image, bina_image1, bina_image2);

以最優閾值進行的半閾值化小姑如下:

(計算機視覺)計算機視覺基礎

opencv cximage cimg freeimage opencv中vc庫的版本與visual studio版本的對應關係 vc8 2005 vc9 2008 vc10 2010 vc11 2012 vc12 2013 vc14 2015 vc15 2017 visual studio中的輔助...

計算機視覺

主講老師 曹洋 課程 視覺 基礎 底 層處理 影象處理 特徵提 取 中 層處理 影象分割 相機標 定 深度 估計 運 動估計 高層處 理 3d 重建 目 標識別 視 覺基 礎 底層 處理 圖 像處理 特徵提取 中層 處理 圖 像分割 相機標定 深度估 計 運動 估計 高層處理 3d重 建 目標 識別...

計算機視覺

眾所周知,計算機不認識影象,只認識數字。為了使計算機能夠 理解 影象,從而具有真正意義上的 視覺 本章我們將研究如何從影象中提取有用的資料或資訊,得到影象的 非影象 的表示或描述,如數值 向量和符號等。這一過程就是特徵提取,而提取出來的這些 非影象 的表示或描述就是特徵。有了這些數值或向量形式的特徵...