『壹』 簡單閾值法和Otsu演算法的根本區別是什麼
區別如下:
Niblack演算法是通過某一像素點及其鄰域內像素點灰度值的均值和標准差計算得到二值化閾值的。在計算圖像點(x,y)二值化閾值時,首先計算以(x,y)為中心的n*n大小的區域內像素點的灰度均值m和標准差s。灰度均值m和標准差s的計算公式如下:
然後根據灰度均值和標准差計算得到點(x,y)的二值化閾值T,計算公式為T(x,y)=k*s(x,y)+m(x,y),其中k為修正系數。最後根據計算得到的閾值T對該點進行二值化處理。將圖像中所有的像素點按照此方法處理即可得到二值化圖像。
雖然能夠實現圖像的二值化,但是如果選取的區域均為背景點時,該演算法會將灰度值較高的點當做是目標點,導致偽雜訊的引入(針對偽雜訊引入的問題,產生了Sauvola演算法)。此處說明一下Sauvola演算法。Sauvola演算法可以說是一種改進的Niblack演算法。首先也是按照上文所述方式求取灰度均值和標准差,但是採用了不同的閾值選取方法。
『貳』 圖像分割中的otsu演算法 有原理介紹么我在網上搜的論文都是改進啊或者研究什麼的 沒有最基礎的演算法介紹
這個演算法很簡單,是個日本人70年代寫的論文,你看看能不能搜到。具體的就是遍歷灰度0-255,選擇一個灰度值,使他們的類間距最大,圖像中摻著一些模式識別的概念,我想看看ostu的公式就能懂了吧,沒有這么復雜。
『叄』 基於改進的 OSTU 演算法OLED 顯示面板缺陷檢測系統
Development of OLED Panel Defect Detect System through Improved Otsu Algorithm
OLED 已經逐漸變成新一代的顯示設備。視角廣、畫質均勻、響應快、低能耗,並且能做成柔性顯示屏都是他的優點。他也廣泛應用到MP3、MP4,手機,數碼相機,移動終端等領域。OLED 的復雜製造工藝不可避免的引入各種缺陷,例如: blemish Defect 、 line Defect 和 Mura Defect 。這些缺陷影響 OLED 的光線均勻性,圖像清晰度和生產周期。因此開發一套快速高精度的 OLED 在線缺陷監測系統來保證產品質量變得非常重要。
最近幾年,基於機器視覺的光學檢測在電子裝備領域得到了個更多的關注。圖像分割和帶通濾波技術已經被應用到表片缺陷檢測,例如,電路板印刷表面缺陷、TFT-LCD缺陷檢測。TFT-LCD 缺陷檢測演算法主要應用於頻域空間和空域空間。SHK 等人證明 OLED 缺陷顯示屏由周期性紋理背景和缺陷組成。在頻域空間,缺陷響應頻域中的高頻部分,周期性背景紋理響應低頻部分。高通濾波器能夠濾掉周期性背景紋理,留下高頻部分的缺陷信息。該方法的創新在於用了一個平滑窗口函數代替了頻域的濾波。平滑圖像和原始圖像差分,獲得有缺陷的圖像。但是該方法的問題在於:周期性的背景紋理邊緣也在高頻響應,高通濾波和差分操作紋理邊緣也保留下來了。這些紋理邊緣也被視作缺陷,因而影響了檢測結果的准確率。
S.Fan 等人想出了一個回歸診斷的TFT-LCD缺陷檢測方法。他們假設良品是光照一致,亮度均勻,缺陷顯品局部亮度、對比度和背景不一致。該方法首先將屏幕分成許多子塊,並計算每一塊的平均灰度值,灰度均值代替該區塊值,該背景塊和原始圖像塊差分。通過殘差分析判斷差分圖像是否包含缺陷塊。雖然該方法能實現缺陷自動檢測,但是時間復雜度比較高,並且殘差分析判斷參數需要手動校準。TSAI 設計了一個基於一維傅里葉變換的圖像重建演算法,該方法對明顯的紋理圖片有很好的效果。Lu 等人提出了一種基於獨立成分分析ICA的缺陷檢測方法。Zhang 等人設計基於多項式表面擬合的演算法,該方法能有效檢測復雜背景中的 Blemish Defect 。在特徵提取領域,這些方法關注目標的對比度,面積,尺寸,位置,輪廓,形狀和亮度均勻性,然後建立 Blemish Defect 模型。然而,該方法有不確定性,每個特徵的權重是很難確定的。實驗結果表明有一定程度的不確定性。因此,在 TFT-LCD 屏幕缺陷檢測領域存在一些有用的方法,但是不存在一個能解決所有類型缺陷的通用方法。該演算法由於時間復雜度太高,不適合快速工業生產檢測。
OLED 和 TFT-LCD顯示屏在微觀層面有一些不同。主要在於:OLED 像素有三個獨立的子像素組成,三個子像僅僅顯示的發光材料不同,其它都一致。子像素和電路被整齊的排列在顯示屏上。OLED 和 TFT-LCD 在微觀結構是不相同的,因此在圖像顯示方面有一些特別。復雜的製造程序使得屏幕包含發光異常的缺陷。這些缺陷來自環境或者生產程序包括塵埃和外部因素。該文獻提出的塊掃描檢測系統,目的在於解決OLED 顯示屏中的多種缺陷。
OLED 屏幕缺陷檢測系統結構如圖2,該檢測系統包括 CCD 相機,運動控制卡,採集卡,XY 運動平台,光源和其它周邊設備。運動控制卡驅動控制 XY 運動平台,以便我們能夠用鏡頭掃描 OLED 獲得圖像。CCD 相機通過圖像採集卡獲取圖像到電腦,通過電腦完成圖像處理和缺陷識別。對捕獲的OLED顯示像素的圖像的代表性樣品如圖3所示。
缺陷檢測系統基本方法論:從獲取的圖像中用細化技術提取 OLED 顯示屏的骨架;然後,骨架圖像和原始圖像差分獲得一個理想的模板圖像。通過改進的Otsu 演算法獲取一個理想的分割閾值。通過二值圖像識別缺陷。
在本文,通過圖像的細化技術提取 OLED 圖像的骨架信息,初始角點信息可以通過定位符" + "獲得。通過投影的骨架圖像的過程生成完整的控制點圖,以確定初始角點分布,找到正確的距離,並添加丟失角點。生成圖像用來和標准模板圖像差分。骨架信息是一個幾何圖形的拓撲描述。骨架是一個線性幾何,並被放置在圖像的對稱中心,和初始圖像一樣的拓撲結構,並保留初始形狀。該方法被廣泛運用在計算機視覺、生物形狀描述、模式識別、工業檢測、和圖像壓縮領域。
『肆』 otsu閾值分割演算法是什麼
Otsu演算法:最大類間方差法(大津演算法),是一種確定閾值的演算法。
之所以稱為最大類間方差法是因為,用該閾值進行的圖像固定閾值二值化,類間方差最大,它是按圖像的灰度特性,將圖像分成背景和前景兩部分,使類間方差最大的分割意味著錯分概率最小。
演算法評價:
優點:演算法簡單,當目標與背景的面積相差不大時,能夠有效地對圖像進行分割。
缺點:當圖像中的目標與背景的面積相差很大時,表現為直方圖沒有明顯的雙峰,或者兩個峰的大小相差很大,分割效果不佳,或者目標與背景的灰度有較大的重疊時也不能准確的將目標與背景分開。
『伍』 otsu演算法同時有幾個最大類間分差的解決辦法
OTSU-最大類間方差是由日本學者大津(OTSU)於1979年提出的,是一種自適應的閾值確定的方法,又叫大津法,簡稱OTSU。 KSW 雙閾值方法1985年Kapur,Sahoo和Wong(三個人)提出一種最佳熵自動門限法,在此簡稱KSW 方法
『陸』 otsu法和threshold有什麼區別
盲猜是圖像二值化處理的問題。
首先說結論:otsu法和threshold並不是一類東西,沒法說有什麼區別。otsu法是得出threshold的一個演算法。
一個灰度圖像,每個像素的灰度值都是一個位元組,8位,也就是0~255。數越大顏色越淺,越小顏色越深,0是黑色,255是白色。
二值化圖像也就是只有黑和白兩種顏色,一般情況下0是黑,1是白。
將灰度圖進行二值化處理時也就需要一個閾值,也就是threshold。小於這個閾值的數為0,這個點為黑色;大於這個閾值的數為1,這個點為白色。
所以圖像二值化最根本的問題就在於怎麼去選擇這個閾值。
最簡單的辦法就是設定一個固定值,這是運算速度最快也是最弱智的方法。顯然這種方法對環境光的要求比較高,如果整體環境的明暗發生變化,那麼對設定的閾值也要重新整定。
所以需要找到一種能夠自動計算出閾值的演算法。這種演算法有很多,OTSU法是其中用的比較多的一個方法。
OTSU法,中文叫大津法,是由日本學者大津展之提出的,因此以他的名字命名。大津法的根本思想是,首先通過聚類的方法將圖像的灰度值分為前景和背景兩類,再窮舉所有像素點的灰度值,並計算出一個閾值使得類間方差最大,這樣這個閾值就是一個理想的二值化閾值。大津法能夠很好的適應圖像的明暗度和對比度的變化。
大津法的具體演算法可以參考這篇文章:網頁鏈接
『柒』 MATLAB--數字圖像處理 Otsu演算法(雙閾值)
該演算法就是利用otsu演算法計算出兩個閾值
公式
g=w0 (u0-u)^2+w1 (u1-u) ^2+ w2*(u2-u) ^2
g最大值時,就可以選出兩個閾值
求兩個閾值
利用這兩個閾值分割圖像
主函數調用
『捌』 什麼是三幀差分法
三幀差分演算法是相鄰兩幀差分演算法的一種改進方法,它選取連續三幀視頻圖像進行差分運算,消除由於運動而顯露背景影響,從而提取精確的運動目標輪廓信息。該演算法的基本原理是是先選取視頻圖像序列中連續三幀圖像並分別計算相鄰兩幀的差分圖像,然後將差分圖像通過選取適當的閾值進行二值化處理,得到二值化圖像,最後在每一個像素點得到的二值圖像進行邏輯與運算,獲取共同部分,從而獲得運動目標的輪廓信息。
三幀差法的具體演算法如下。
提取連續的三幀圖像,I(k-1),I(k),I(k+1) 。
(1) d(k,k-1) [x,y] = | I(k)[x,y] - I(k-1)[x,y] |;
d(k,k+1)[x,y] = | I(k+1)[x,y] - I(k)[x,y] |;
(2) b(k,k-1)[x,y] = 1; if d(k,k-1) [x,y] >= T;
b(k,k-1)[x,y] = 0; if d(k,k-1) [x,y] < T;
b(k+1,k)[x,y] = 1 if d(k+1,k) [x,y] >= T;
b(k+1,k)[x,y] = 0 if d(k+1,k) [x,y] < T;
(3) B(k)[x,y] = 1 ; if b(k,k-1)[x,y] && b(k+1,k)[x,y] == 1 ;
B(k)[x,y] = 0 ; if b(k,k-1)[x,y] && b(k+1,k)[x,y] ==0 ;
比較關鍵的就是第2步的閾值T的選取問題,單純用otsu演算法分割貌似效果不太好,如果手動設置一個較小的值(如10)效果還行。
用otsu取閾值實現的一個三分差法代碼。效果不是很好。
運行環境 VS2008+OpenCV2.0+windows XP .
[cpp] view plainprint?#include "highgui.h"
#include "cv.h"
#include "cxcore.h"
#include "cvaux.h"
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
#include <windows.h>
using namespace std;
#pragma comment(lib, "highgui200.lib")
#pragma comment(lib, "cv200.lib")
#pragma comment(lib, "cxcore200.lib")
#pragma comment(lib, "cvaux200.lib")
#define GET_IMAGE_DATA(img, x, y) ((uchar*)(img->imageData + img->widthStep * (y)))[x]
int T = 10;
int Num[300];
int Sum[300];
void InitPixel(IplImage * img, int &_low, int &_top)
{
memset(Num,0,sizeof(Num));
memset(Sum,0,sizeof(Sum));
_low = 255;
_top = 0;
for(int i = 0;i < img->height;i++)
{
for(int j = 0;j < img->width;j++)
{
int temp = ((uchar*)(img->imageData + img->widthStep*i))[j];
if(temp < _low)
_low = temp;
if(temp > _top)
_top = temp;
Num[temp] += 1;
}
}
for(int i = 1 ; i < 256 ; i++)
{
Sum[i] = Sum[i-1]+ i*Num[i];
Num[i] += Num[i-1];
}
}
int otsu (IplImage *img)
{
int _low,_top,mbest=0;
float mn = img->height*img->width;
InitPixel(img,_low,_top);
float max_otsu = 0;
mbest = 0;
if( _low == _top)
mbest = _low;
else
{
for(int i = _low; i< _top ; i++)
{
float w0 = (float)((Num[_top]-Num[i]) / mn);
float w1 = 1 - w0;
float u0 = (float)((Sum[_top]-Sum[i])/(Num[_top]-Num[i]));
float u1 = (float)(Sum[i]/Num[i]);
float u = w0*u0 + w1*u1;
float g = w0*(u0 - u)*(u0 - u) + w1*(u1 - u)*(u1 - u);
if( g > max_otsu)
{
mbest = i;
max_otsu = g;
}
}
}
return mbest;
}
int main()
{
int ncount=0;
IplImage *image1=NULL;
IplImage *image2=NULL;
IplImage *image3=NULL;
IplImage *Imask =NULL;
IplImage *Imask1=NULL;
IplImage *Imask2=NULL;
IplImage *Imask3=NULL;
IplImage *mframe=NULL;
CvCapture *capture = cvCreateFileCapture("E:\\Motion\\IndoorGTTest2.avi");
//CvCapture *capture = cvCreateCameraCapture(0);
cvNamedWindow("src");
cvNamedWindow("dst");
cvNamedWindow("Imask1");
cvNamedWindow("Imask2");
cvNamedWindow("Imask3");
//cvCreateTrackbar("T","dst",&T,255,0);
while(mframe=cvQueryFrame(capture))
{
DWORD start=GetTickCount();
if(ncount>1000000000)
ncount=100;
ncount+=1;
if(ncount==1)
{
image1=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
image2=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
image3=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
Imask =cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
Imask1=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
Imask2=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
Imask3=cvCreateImage(cvGetSize(mframe),IPL_DEPTH_8U,1);
cvCvtColor(mframe,image1,CV_BGR2GRAY);
}
if(ncount==2)
cvCvtColor(mframe,image2,CV_BGR2GRAY);
if(ncount>=3)
{
if(ncount==3)
cvCvtColor(mframe,image3,CV_BGR2GRAY);
else
{
cvCopy(image2,image1);
cvCopy(image3,image2);
cvCvtColor(mframe,image3,CV_BGR2GRAY);
}
cvAbsDiff(image2,image1,Imask1);
cvAbsDiff(image3,image2,Imask2);
//cvShowImage("Imask1",Imask1);
//cvShowImage("Imask2",Imask2);
int mbest1 = otsu(Imask1);
cvSmooth(Imask1, Imask1, CV_MEDIAN);
cvThreshold(Imask1,Imask1,mbest1, 255, CV_THRESH_BINARY);
int mbest2 = otsu(Imask2);
cvSmooth(Imask2,Imask2, CV_MEDIAN);
cvThreshold(Imask2,Imask2,mbest2, 255, CV_THRESH_BINARY);
cout<<mbest1<<" "<<mbest2<<endl;
cvAnd(Imask1,Imask2,Imask);
/*cvErode(Imask, Imask);
cvDilate(Imask,Imask);*/
DWORD finish=GetTickCount();
// cout<<finish-start<<"ms"<<endl;
cvShowImage("src",image2);
cvShowImage("dst",Imask);
}
char c = cvWaitKey(30);
if(c==27)
break;
}
return 0;
}
『玖』 閾值分割的OTSU演算法
OTSU演算法又叫最大類間方差閾值分割演算法,也叫大津演算法(大津展之 Ōtsu Nobuyuki),主要用於一些簡單的閾值確定。
對於下面這張灰度圖片:
我們想讓這些物體(前景)和背景區分更明顯一些,比如讓物體為純黑,背景全白。那麼我們就需要找到一個合適的閾值,使圖片上灰度值大於這個閾值的像素點為255(白色),灰度值小於閾值的像素點為0(黑色)。也就是變成下面這幅圖:
怎樣確定這個閾值呢?OTSU演算法說,我們可以求出用這個閾值分割後的兩個圖像對應pixel的類間方差。對於每一個可能的閾值,我們計算並取出類間方差最大的那個像素pixel值,此時這個值就可以較好的對圖像進行分割。
對應直方圖如下:
1、將灰度值區間為[0,m],對於[0,m]間的每一個灰度t,將它作為閾值將圖像分割為灰度為[0,t]以及[t+1,m]兩部分。
2、計算每一部分的所佔比例 , ,每一部分的平均灰度值 , ,以及總的平均灰度值 。
3、計算他們的類間方差:
4、取出類間方差最大時對應的閾值t,這就可以作為我們最終所取的閾值。
小夥伴們如果覺得文章還行的請點個贊呦!!同時覺得文章哪裡有問題的可以評論一下 謝謝你!