當前位置:首頁 » 操作系統 » otsu演算法的改進

otsu演算法的改進

發布時間: 2022-04-11 17:23:13

『壹』 otsu演算法同時有幾個最大類間分差的解決辦法

OTSU-最大類間方差是由日本學者大津(OTSU)於1979年提出的,是一種自適應的閾值確定的方法,又叫大津法,簡稱OTSU。 KSW 雙閾值方法1985年Kapur,Sahoo和Wong(三個人)提出一種最佳熵自動門限法,在此簡稱KSW 方法

『貳』 otsu閾值分割演算法是什麼

Otsu演算法:最大類間方差法(大津演算法),是一種確定閾值的演算法。

之所以稱為最大類間方差法是因為,用該閾值進行的圖像固定閾值二值化,類間方差最大,它是按圖像的灰度特性,將圖像分成背景和前景兩部分,使類間方差最大的分割意味著錯分概率最小。

演算法評價:

優點:演算法簡單,當目標與背景的面積相差不大時,能夠有效地對圖像進行分割。

缺點:當圖像中的目標與背景的面積相差很大時,表現為直方圖沒有明顯的雙峰,或者兩個峰的大小相差很大,分割效果不佳,或者目標與背景的灰度有較大的重疊時也不能准確的將目標與背景分開。

『叄』 otsu的介紹

OTSU演算法是由日本學者OTSU於1979年提出的一種對圖像進行二值化的高效演算法。

『肆』 【高分】用Matlab實現中值濾波與Otsu演算法

告訴你一個簡單的方法
你可以edit medfilt2
edit graythresh
就可以得到原函數的詳細編碼,然後再稍微修改一下就行了唄

『伍』 簡單閾值法和Otsu演算法的根本區別是什麼

區別如下:


  1. Niblack演算法是通過某一像素點及其鄰域內像素點灰度值的均值和標准差計算得到二值化閾值的。在計算圖像點(x,y)二值化閾值時,首先計算以(x,y)為中心的n*n大小的區域內像素點的灰度均值m和標准差s。灰度均值m和標准差s的計算公式如下:

  2. 然後根據灰度均值和標准差計算得到點(x,y)的二值化閾值T,計算公式為T(x,y)=k*s(x,y)+m(x,y),其中k為修正系數。最後根據計算得到的閾值T對該點進行二值化處理。將圖像中所有的像素點按照此方法處理即可得到二值化圖像。

  3. 雖然能夠實現圖像的二值化,但是如果選取的區域均為背景點時,該演算法會將灰度值較高的點當做是目標點,導致偽雜訊的引入(針對偽雜訊引入的問題,產生了Sauvola演算法)。此處說明一下Sauvola演算法。Sauvola演算法可以說是一種改進的Niblack演算法。首先也是按照上文所述方式求取灰度均值和標准差,但是採用了不同的閾值選取方法。

『陸』 什麼是三幀差分法

三幀差分演算法是相鄰兩幀差分演算法的一種改進方法,它選取連續三幀視頻圖像進行差分運算,消除由於運動而顯露背景影響,從而提取精確的運動目標輪廓信息。該演算法的基本原理是是先選取視頻圖像序列中連續三幀圖像並分別計算相鄰兩幀的差分圖像,然後將差分圖像通過選取適當的閾值進行二值化處理,得到二值化圖像,最後在每一個像素點得到的二值圖像進行邏輯與運算,獲取共同部分,從而獲得運動目標的輪廓信息。

三幀差法的具體演算法如下。

提取連續的三幀圖像,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;
}

『柒』 誰可以給出matlab源碼啊基於一種改進的Otsu圖像閾值分割演算法的,一維的。

z++++++++x+x+
+xcccccccccccccc
cd
vvvv+c v

『捌』 Otsu演算法在Canny運算元中的應用中,Otsu演算法的程序後,要不要再添加在Canny運算元的程序

問題一:
OTSU法是二值化圖像的演算法,經過OTSU處理圖像就成了黑白二值圖。
CANNY演算法是針對灰度圖的邊緣提取演算法。OTSU處理後,不需要再加CANNY處理了。

問題二:
如果圖像噪音較大,就需要先做中值濾波,或其它降噪處理。這是圖像處理的前處理。做前處理的目的是提高圖像質量,然後再做OTSU,效果會好一些。但圖像本身就很清晰的話,就不需要加中值濾波了。

通過你的問題,我感覺你還沒有透徹理解幾個術語的概念。
先想清楚想把什麼樣的圖像處理成什麼樣的圖像,然後根據目的選擇處理方法。

如果話說重了,請原諒。

『玖』 圖像分割中的otsu演算法 有原理介紹么我在網上搜的論文都是改進啊或者研究什麼的 沒有最基礎的演算法介紹

這個演算法很簡單,是個日本人70年代寫的論文,你看看能不能搜到。具體的就是遍歷灰度0-255,選擇一個灰度值,使他們的類間距最大,圖像中摻著一些模式識別的概念,我想看看ostu的公式就能懂了吧,沒有這么復雜。

『拾』 如何對不規則圖形做基於otsu演算法的圖像自適應閾值分割

難度不大,
otsu演算法的圖像自適應閾值分割
我稍微指點你。

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:521
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:868
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91