vbnet灰度圖像的簡單介紹

幾種經(jīng)典的二值化方法及其vb.net實(shí)現(xiàn)

圖像二值化的目的是最大限度的將圖象中感興趣的部分保留下來,在很多情況下,也是進(jìn)行圖像分析、特征提取與模式識(shí)別之前的必要的圖像預(yù)處理過程。這個(gè)看似簡單的問題,在過去的四十年里受到國內(nèi)外學(xué)者的廣泛關(guān)注,產(chǎn)生了數(shù)以百計(jì)的閾值選取方法,但如同其他圖像分割算法一樣,沒有一個(gè)現(xiàn)有方法對(duì)各種各樣的圖像都能得到令人滿意的結(jié)果。

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)薩嘎,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

本文針對(duì)幾種經(jīng)典而常用的二值發(fā)放進(jìn)行了簡單的討論并給出了其vb.net 實(shí)現(xiàn)。

1、P-Tile法

Doyle于1962年提出的P-Tile (即P分位數(shù)法)可以說是最古老的一種閾值選取方法。該方法根據(jù)先驗(yàn)概率來設(shè)定閾值,使得二值化后的目標(biāo)或背景像素比例等于先驗(yàn)概率,該方法簡單高效,但是對(duì)于先驗(yàn)概率難于估計(jì)的圖像卻無能為力。

2、OTSU 算法(大津法)

OSTU算法可以說是自適應(yīng)計(jì)算單閾值(用來轉(zhuǎn)換灰度圖像為二值圖像)的簡單高效方法。1978 OTSU年提出的最大類間方差法以其計(jì)算簡單、穩(wěn)定有效,一直廣為使用。

3、迭代法(最佳閥值法)

(1). 求出圖象的最大灰度值和最小灰度值,分別記為Zl和Zk,令初始閾值為:

(2). 根據(jù)閾值TK將圖象分割為前景和背景,分別求出兩者的平均灰度值Z0和ZB:

式中,Z(i,j)是圖像上(i,j)點(diǎn)的象素值,N(i,j)是(i,j)點(diǎn)的權(quán)值,一般取1。

(3). 若TK=TK+1,則所得即為閾值,否則轉(zhuǎn)2,迭代計(jì)算。

4、一維最大熵閾值法

它的思想是統(tǒng)計(jì)圖像中每一個(gè)灰度級(jí)出現(xiàn)的概率 ,計(jì)算該灰度級(jí)的熵 ,假設(shè)以灰度級(jí)T分割圖像,圖像中低于T灰度級(jí)的像素點(diǎn)構(gòu)成目標(biāo)物體(O),高于灰度級(jí)T的像素點(diǎn)構(gòu)成背景(B),那么各個(gè)灰度級(jí)在本區(qū)的分布概率為:

O區(qū): i=1,2……,t

B區(qū): i=t+1,t+2……L-1

上式中的 ,這樣對(duì)于數(shù)字圖像中的目標(biāo)和背景區(qū)域的熵分別為:

對(duì)圖像中的每一個(gè)灰度級(jí)分別求取W=H0 +HB,選取使W最大的灰度級(jí)作為分割圖像的閾值,這就是一維最大熵閾值圖像分割法。

VB 如何識(shí)別圖像時(shí)RGB顏色模式,還是灰度顏色模式?

'利用API-GetPixel 獲取窗體或圖片某一點(diǎn)的顏色值(long類型)。注意SaleMode屬性要設(shè)為3

'然后將long換算成rgb值,再判斷rgb是否相等(相等的為灰色)

'重復(fù)上面幾步,進(jìn)行采樣判斷。當(dāng)然如果你確定某一點(diǎn) 不是灰色 就是彩色的話 ,判斷 一次就行

’--這樣做不是非常精確,但一般還是可以的....

vb.net 打印問題

可以將打印機(jī)默認(rèn)打印設(shè)置改為黑白打印,如果打印對(duì)象是RGB配色,打印機(jī)驅(qū)動(dòng)轉(zhuǎn)換為CMYK顏色時(shí),黑色都是由彩色墨水組成的

2.可以試一下圖片從一個(gè)標(biāo)準(zhǔn)灰度圖片格式化而來,這樣圖片自身只有黑白色,也許可以

關(guān)于VB.NET中圖像二值化中的閥值法是什么意思呢

不要分

灰度圖像的像素的取值范圍為

0-255,0代表黑,255代表最亮,中間值是不同的亮度

圖像二值化,就是通過某個(gè)判斷標(biāo)準(zhǔn),將灰度圖像變成只有兩個(gè)值的圖像,即圖像值不是0,就是255

閾值,就是這個(gè)判斷標(biāo)準(zhǔn),比如,如果閾值取100,那么圖像灰度小于等于100的像素,都變成0

圖像灰度大于100的,都變成255

VB求灰度圖轉(zhuǎn)二值化,或者有直接二值化的代碼

用point?方法太慢了,還是用api的getDIBits和setDIBits吧,彩圖轉(zhuǎn)灰度圖的代碼如下:

Private?Declare?Function?GetBitmapBits?Lib?"gdi32"?(ByVal?hBitmap?As?Long,?ByVal?dwCount?As?Long,?lpBits?As?Any)?As?Long

Private?Declare?Function?SetBitmapBits?Lib?"gdi32"?(ByVal?hBitmap?As?Long,?ByVal?dwCount?As?Long,?lpBits?As?Any)?As?Long

Private?Declare?Function?GetDIBits?Lib?"gdi32"?(ByVal?aHDC?As?Long,?ByVal?hBitmap?As?Long,?ByVal?nStartScan?As?Long,?ByVal?nNumScans?As?Long,?lpBits?As?Any,?lpBI?As?BitMapInfo,?ByVal?wUsage?As?Long)?As?Long

Private?Declare?Function?SetDIBits?Lib?"gdi32"?(ByVal?hdc?As?Long,?ByVal?hBitmap?As?Long,?ByVal?nStartScan?As?Long,?ByVal?nNumScans?As?Long,?lpBits?As?Any,?lpBI?As?BitMapInfo,?ByVal?wUsage?As?Long)?As?Long

Private?Type?BitMapInfoHeader?''文件信息頭——BITMAPINFOHEADER

biSize?As?Long

biWidth?As?Long

biHeight?As?Long

biPlanes?As?Integer

biBitCount?As?Integer

biCompression?As?Long

biSizeImage?As?Long

biXPelsPerMeter?As?Long

biYPelsPerMeter?As?Long

biClrUsed?As?Long

biClrImportant?As?Long

End?Type

Private?Type?RGBQuad

rgbBlue?As?Byte

rgbGreen?As?Byte

rgbRed?As?Byte

''rgbReserved?As?Byte

End?Type

Private?Type?BitMapInfo

bmiHeader?As?BitMapInfoHeader

bmiColors?As?RGBQuad

End?Type

Private?Sub?Command1_Click()

Dim?ix?As?Integer

Dim?iy?As?Integer

Dim?iWidth?As?Integer?'以像素為單位的圖形寬度

Dim?iHeight?As?Integer?'以像素為單位的圖形高度

Dim?bytGray?As?Byte

Dim?bytThreshold?As?Byte

Dim?bits()?As?Byte?'三維數(shù)組,用于獲取原彩色圖像中各像素的RGB數(shù)值以及存放轉(zhuǎn)化后的灰度值

Dim?bitsBW()?As?Byte?'三維數(shù)組,用于存放轉(zhuǎn)化為黑白圖后各像素的值

'獲取圖形的寬度和高度

iWidth?=?Picture1.ScaleWidth?/?Screen.TwipsPerPixelX

iHeight?=?Picture1.ScaleHeight?/?Screen.TwipsPerPixelY

Picture1.Picture?=?Picture1.Image

'創(chuàng)建并初始化一個(gè)bitMapInfo自定義類型

Dim?bi24BitInfo?As?BitMapInfo

With?bi24BitInfo.bmiHeader

.biBitCount?=?32

.biCompression?=?0

.biPlanes?=?1

.biSize?=?Len(bi24BitInfo.bmiHeader)

.biWidth?=?iWidth

.biHeight?=?Picture1.ScaleHeight?/?Screen.TwipsPerPixelY

End?With

'重新定義數(shù)組大小

ReDim?bits(3,?0?To?iWidth,?0?To?iHeight)?As?Byte

ReDim?bitsBW(3,?0?To?iWidth,?0?To?iHeight)?As?Byte

'使用GetDIBits方法一次性獲取picture1中各點(diǎn)的rgb值,比point方法或getPixel函數(shù)逐像素獲取像素rgb要快出一個(gè)數(shù)量級(jí)

lrtn?=?GetDIBits(Picture1.hdc,?Picture1.Picture.Handle,?0,?iHeight,?bits(0,?0,?0),?bi24BitInfo,?0)

'數(shù)組的三個(gè)維度分別代表像素的RGB分量、以圖形左下角為原點(diǎn)的X和Y坐標(biāo)。

'具體說來,這時(shí)bits(0,2,3)代表從圖形左下角數(shù)起橫向第2個(gè)縱向第3個(gè)像素的Blue值,而bits(1,2,3)和bits(2,2,3)分別的Green值和Red值.

bytThreshold?=?128?'這里定義轉(zhuǎn)換為黑白圖像時(shí)的閾值為128,即灰色亮度大于128的像素轉(zhuǎn)為白色,小于128的像素轉(zhuǎn)為黑的,此值可根據(jù)需要修改為0-255之前任意數(shù)值

For?ix?=?0?To?iWidth

For?iy?=?0?To?iHeight

'***********RGB轉(zhuǎn)為灰度的算法有多種,這里給出常見的兩種*******

'bytGray?=?bits(0,?ix,?iy)?*?0.11?+?bits(1,?ix,?iy)?*?0.59?+?bits(2,?ix,?iy)?*?0.3?'這是傳統(tǒng)的根據(jù)三原色亮度加權(quán)得到灰階的算法

bytGray?=?(bits(0,?ix,?iy)?^?2.2?*?0.0722?+?bits(1,?ix,?iy)?^?2.2?*?0.7152?+?bits(2,?ix,?iy)?^?2.2?*?0.2126)?^?(1?/?2.2)?'這是簡化?sRGB?IEC61966-2.1?[gamma=2.20],有點(diǎn)類似于photoshop中所用的算法

bits(0,?ix,?iy)?=?bytGray

bits(1,?ix,?iy)?=?bytGray

bits(2,?ix,?iy)?=?bytGray

'*********轉(zhuǎn)為黑白圖像********

If?bits(0,?ix,?iy)??bytThreshold?Then

bitsBW(0,?ix,?iy)?=?0

bitsBW(1,?ix,?iy)?=?0

bitsBW(2,?ix,?iy)?=?0

Else

bitsBW(0,?ix,?iy)?=?255

bitsBW(1,?ix,?iy)?=?255

bitsBW(2,?ix,?iy)?=?255

End?If

Next

Next

'將灰度圖顯示到picture2中

Picture2.Picture?=?Picture2.Image?'如果picture2的picture屬性為空,需要在setDIBits之前將其picture屬性設(shè)置一下,否則無法顯示出圖形

SetDIBits?Picture2.hdc,?Picture2.Picture.Handle,?0,?iHeight,?bits(0,?0,?0),?bi24BitInfo,?0

Picture2.Picture?=?Picture2.Image

'將黑白圖顯示到picture3中

Picture3.Picture?=?Picture3.Image

SetDIBits?Picture3.hdc,?Picture3.Picture.Handle,?0,?iHeight,?bitsBW(0,?0,?0),?bi24BitInfo,?0

Picture3.Picture?=?Picture3.Image

End?Sub

代碼運(yùn)行很快,如圖所示圖片基本可瞬間完成

vb.net怎么使圖像灰度化再輸出

在web上可以使用HTML5的特效實(shí)現(xiàn)。

在windows forms里面可以直接修改設(shè)置圖片的屬性。

Try

' 圖片位置初始化一個(gè)image1

Dim image1 As New Bitmap(

"C:\Documents and Settings\All Users\Documents\My Music\music.bmp",

True)

Dim x, y As Integer

' Loop through the images pixels to reset color.

For x = 0 To image1.Width - 1

For y = 0 To image1.Height - 1

Dim pixelColor As Color = image1.GetPixel(x, y)

Dim newColor As Color =

Color.FromArgb(pixelColor.R, 0, 0)

image1.SetPixel(x, y, newColor)

Next

Next

' Set the PictureBox to display the image.

PictureBox1.Image = image1

' Display the pixel format in Label1.

Label1.Text = "Pixel format: " + image1.PixelFormat.ToString()

Catch ex As ArgumentException

MessageBox.Show("There was an error." _

"Check the path to the image file.")

End Try

網(wǎng)頁名稱:vbnet灰度圖像的簡單介紹
文章分享:http://www.muchs.cn/article6/doochog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、微信小程序、標(biāo)簽優(yōu)化App開發(fā)、網(wǎng)站策劃、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司