在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數字圖像基本處理算法小結

新機器視覺 ? 來源:新機器視覺 ? 作者:新機器視覺 ? 2023-01-29 14:46 ? 次閱讀

初學圖像處理,在常用算法方面,二白實在是有些頭疼。就在昨天,親愛的小白師兄,對迷茫的二白伸出了援手,為二白送來了一大份干貨——圖像處理常用算法總結。二白仔細閱讀了這些干貨,并將其中的代碼跑了幾遍,覺得受益匪淺。在這里,二白將干貨分享給大家。

1.二值化:

76416592-9f1c-11ed-bfe3-dac502259ad0.jpg

圖1 二值化(閾值:140)處理效果

所謂二值化簡單一點講,就是將圖像劃分成黑和白,通過設定一個標準如果大于這個標準就設為白,如果小于這個標準,就設為黑,而這個標準,就叫做閾值。

具體定義如下所示:

76521676-9f1c-11ed-bfe3-dac502259ad0.jpg

下面給出實現的代碼:

//二值化
//函數的參數iTR為閾值
voidCBMPSampleDlg::ThresholdProcess(intiTR)
{
//讀取BMP文件
 m_Dib.AttachMapFile("1.bmp", TRUE);
 m_Dib.CopyToMapFile("二值化.bmp");
//將像素指針定位到圖像數據的開始
 RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;
//獲得圖像的大小
intiSize = m_Dib.GetSizeImage();
//BMP文件頭指針
 BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;
//遍歷每一個像素,并判斷每一個像素的分量(RGB),將其與閾值比較,然后進行賦值
for(inti =0; i < iSize/( pBmiHeader->biBitCount /8); i++)
 {
if( (rgbtri[i].rgbtRed < iTR )| (rgbtri[i].rgbtGreen < iTR) | (rgbtri[i].rgbtBlue < iTR) )
?????????????????? {
??????????????????????????? rgbtri[i].rgbtRed?? = (BYTE)?0;
??????????????????????????? rgbtri[i].rgbtGreen = (BYTE)?0;
??????????????????????????? rgbtri[i].rgbtBlue? = (BYTE)?0;
?????????????????? }
???????????????????else
?????????????????? {
??????????????????????????? rgbtri[i].rgbtRed?? = (BYTE)?255;
??????????????????????????? rgbtri[i].rgbtGreen = (BYTE)?255;
??????????????????????????? rgbtri[i].rgbtBlue? = (BYTE)?255;
?????????????????? }
??????? }
?????????//顯示圖像
???????? DrawPic();
}

在讀取圖像之后,會將指針定位到圖像像素數據的開始位置,然后獲得圖像的大小,然后通過BMP文件頭獲得圖像的一個像素所占據的二進制的位數,這樣就知道一個像素由幾個字節組成的了,需要注意的是,一個像素不一定是由三個字節組成的,比如是灰度圖像其只需要一個字節來存儲一個像素究竟是灰到什么程度其范圍在0-255 之間,而彩色圖像卻是由三種顏色組成的也就是所說的三原色RGB分別為Red、Green、Blue三種顏色組成,這三種顏色每個分量各占一個字節,所以這里需要三個字節,另外在BMP圖像中還一個結構為RGBQUAD的結構體,這里一個像素占據的是4個字節,其實,這里就涉及到了8位圖像24位圖像以及32位圖像的問題了,所謂的8位圖像其實,每一個像素占一個字節,24位圖像,每一個像素占據3個字節、而32位圖像每一個像素占據4個字節就是這么來的。代碼中,首先會讀取原始圖像文件,文件的格式為BMP的,關于BMP圖像的存儲結構,在接下來的文章中會講到。

2.海報化

765e1cc8-9f1c-11ed-bfe3-dac502259ad0.jpg

圖2 海報化處理效果

所謂的海報化其實就是將每一個像素的分量與224進行與運算,而244的16進制表示可以表示成0xe0,前面介紹了一個像素的分量的范圍在0-255范圍內,所以只需要將這兩個數值的二進制位相與即可完成海報化的處理效果。

下面為實現的具體代碼:

//海報化
voidCBMPSampleDlg::Posterize()
{
 m_Dib.AttachMapFile("1.bmp", TRUE);
 m_Dib.CopyToMapFile("海報化.bmp");
 RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;
intiSize = m_Dib.GetSizeImage();
 BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;
for(inti =0; i < iSize/( pBmiHeader->biBitCount /8); i++)
 {
 rgbtri[i].rgbtRed = (BYTE) (rgbtri[i].rgbtRed &0xe0);
 rgbtri[i].rgbtGreen = (BYTE) (rgbtri[i].rgbtGreen &0xe0);
 rgbtri[i].rgbtBlue = (BYTE) (rgbtri[i].rgbtBlue &0xe0);
 }
 DrawPic();
}

上面的這段代碼是參考DirectShow里面的ezrgb24濾鏡這個例子改寫的,另外下面的灰度化也是采用里面的改寫的。


3.灰度化

766b1c7a-9f1c-11ed-bfe3-dac502259ad0.jpg

圖3 灰度化處理效果

灰度化有很多種處理方法,有分量法、最大值法、平均值法以及加權平均值法。

1)分量法

將彩色圖像中的三分量的亮度作為三個灰度圖像的灰度值,可根據應用需要選取一種灰度圖像。

f1(i,j)=R(i,j) f2(i,j)=G(i,j)f3(i,j)=B(i,j)

其中fk(i,j)(k=1,2,3)為轉換后的灰度圖像在(i,j)處的灰度值。

2)最大值法

將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值。

f(i,j)=max(R(i,j),G(i,j),B(i,j))

3) 平均值法

將彩色圖像中的三分量亮度求平均得到一個灰度圖。

f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3

4) 加權平均法

根據重要性及其它指標,將三個分量以不同的權值進行加權平均。由于人眼對綠色的敏感最高,對藍色敏感最低,因此,按下式對RGB三分量進行加權平均能得到較合理的灰度圖像。

f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))

在我們的程序中,我們采用的是加權平均法進行灰度化。

下面為實現的代碼:

//灰度化
voidCBMPSampleDlg::ConvertToGray()
{
 m_Dib.AttachMapFile("1.bmp", TRUE);
 m_Dib.CopyToMapFile("灰度化.bmp");
 RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;
intiSize = m_Dib.GetSizeImage();
 BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;
intiGrayvalue =0;
//遍歷每一個像素
for(inti =0; i < iSize/( pBmiHeader->biBitCount /8); i++)
 {
 iGrayvalue =int( rgbtri[i].rgbtBlue *0.11+ rgbtri[i].rgbtGreen *0.59+ rgbtri[i].rgbtRed *0.3);
 rgbtri[i].rgbtRed = (BYTE) iGrayvalue;
 rgbtri[i].rgbtGreen = (BYTE) iGrayvalue;
 rgbtri[i].rgbtBlue = (BYTE) iGrayvalue;
 }
 DrawPic();
}

在上述代碼中,通過遍歷每一個像素,然后計算該像素的三個分量的加權平均值,將三個分量設置成同一個值,這樣就實現了對圖像的灰度化處理。

4.模糊化

76779400-9f1c-11ed-bfe3-dac502259ad0.jpg

圖4 模糊化處理效果

其實所謂的模糊化,就是將各個像素的相鄰的像素的各個分量的值相加,然后除以2就可以實現對圖像的模糊處理。

下面給出代碼:

//模糊化
void CBMPSampleDlg::Blur()
{
 m_Dib.AttachMapFile("1.bmp",TRUE);
 m_Dib.CopyToMapFile("模糊化.bmp");
 RGBTRIPLE *rgbtri = (RGBTRIPLE *)m_Dib.m_lpImage;
 int iSize = m_Dib.GetSizeImage();
 BITMAPINFOHEADER * pBmiHeader = (BITMAPINFOHEADER *)m_Dib.m_lpBMIH;
 LONG lHeight = pBmiHeader->biHeight;
 LONG lWidth = pBmiHeader->biWidth;
for(int y =0; y < lHeight; y++) {
???????????????????for?(int x =?2?; x < lWidth; x++, rgbtri ++) {
??????????????????????????? rgbtri->rgbtRed = (BYTE) ((rgbtri->rgbtRed + rgbtri[2].rgbtRed) >>1);
 rgbtri->rgbtGreen = (BYTE) ((rgbtri->rgbtGreen + rgbtri[2].rgbtGreen) >>1);
 rgbtri->rgbtBlue = (BYTE) ((rgbtri->rgbtBlue + rgbtri[2].rgbtBlue) >>1);
 }
 rgbtri +=2;
 }
 DrawPic();
}

上面的代碼同樣是遍歷每一個像素將前一個像素和后一個像素相加,然后將獲得的值右移一位,這樣就能實現除以2的效果,之所以做位運算,是因為位運算的速度比除法運算要快很多。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像處理
    +關注

    關注

    27

    文章

    1292

    瀏覽量

    56747
  • 算法
    +關注

    關注

    23

    文章

    4612

    瀏覽量

    92901
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68616

原文標題:數字圖像基本處理算法小結

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 數字圖像處理數字圖像處理算法形式

    數字圖像處理
    Mr_haohao
    發布于 :2022年11月04日 16:28:43

    數字圖像處理

    1、圖像的變換和壓縮,利用離散余弦變換(DCT)2、實現圖像的真彩色增強3、實現圖像的灰度變換,利用直方圖均衡化的方法4、使用常用的濾波器對數字圖像進行
    發表于 04-11 23:33

    如何設計數字圖像處理系統中的抗干擾設計?

    目前,由于運算速度快、片上資源豐富和能夠實現復雜的線性和非線性算法等原因,DSP已成為通信、計算機和消費電子產品等領域的基礎器件,其中在數字圖像處理技術中顯得尤為突出。本文就是介紹基于DSP的
    發表于 10-17 06:14

    常見圖像傳統處理算法是什么?

    常見圖像傳統處理算法是什么?
    發表于 09-28 08:58

    基于Blackfin 561的數字圖像的成像處理

    基于Blackfin 561的數字圖像的成像處理:摘要:數字圖像的成像處理可分為圖像處理
    發表于 09-30 20:32 ?11次下載

    數字圖像處理算法在QR碼識別中的應用

    介紹了基于數字圖像處理的QR碼識別算法。該方案綜合運用了圖像灰度化、濾波去噪、二值化、邊緣檢測、圖像旋轉等多種
    發表于 04-08 09:16 ?64次下載
    <b class='flag-5'>數字圖像</b><b class='flag-5'>處理算法</b>在QR碼識別中的應用

    數字圖像處理實驗報告

    數字圖像處理實驗報告數字圖像處理實驗報告數字圖像處理實驗報告
    發表于 11-11 15:33 ?0次下載

    數字圖像處理試題集

    數字圖像處理試題集數字圖像處理試題集數字圖像處理試題集
    發表于 12-21 15:13 ?3次下載

    DSP6748圖像處理算法

    DSP6748圖像處理算法-StarterWare
    發表于 05-19 15:13 ?16次下載

    數字圖像處理技術__PPT - 復件

    數字圖像處理是信息學科一個重要的類別,可以和電子技術結合發展。數字圖像處理技術__PPT - 復件資料。
    發表于 06-24 15:33 ?0次下載

    圖像處理算法有哪些_圖像處理十大經典算法

    圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。目前大多數的圖像是以數字
    發表于 01-12 16:17 ?8.5w次閱讀

    圖像處理技術是什么_圖像處理技術現狀和發展前景

    數字圖像處理技術正在向處理算法更優化、處理速度更快、處理后的圖像清晰度更高的方向發展,實現
    發表于 01-12 17:47 ?5.5w次閱讀

    DSP圖像處理算法

    DSP技術作為數字化技術的基石,已經、正在、并且還將在數字化中扮演一個不可或缺的角色。DSP的核心算法與實現,越來越多的人正在認識、熟悉和使用它。依托于DSP硬件平臺來實現數字圖像
    發表于 04-09 10:39 ?18次下載

    數字圖像處理的學習教程免費下載

    數字圖像處理算法成為可能。本手冊旨在作為課堂演示的輔助工具以及交互式研究的實驗室指南。圖像處理實驗室的結構遵循大多數數字圖像
    發表于 12-01 08:00 ?32次下載

    數字圖像處理基本的知識(一)

    數字圖像處理基本知識(一) demi 在 周二, 04/02/2019 - 13:38 提交 1、數字圖像數字圖像,又稱為數碼圖像或數位
    的頭像 發表于 03-24 17:24 ?6950次閱讀
    主站蜘蛛池模板: 免费国内精品久久久久影院| 欧美天天在线| www.黄黄黄| www.亚洲欧美| 欧美αv日韩αv另类综合| 伊人网在线视频| 免费被视频网站在线观看| 五月婷婷激情六月| 国产成人小视频| 五月婷婷六月丁香激情| 亚洲аv电影天堂网| 国产一区二区高清在线| 国产性夜夜性夜夜爽91| 亚洲精品成人a在线观看| 国产精品美女在线观看| av网址在线看| 色婷婷亚洲十月十月色天| 最新久久精品| 色婷婷激情五月| 免费爱爱网址| 欧美日韩色片| 性色小视频| 夜夜骑日日射| 欧美aaaaaaaaa| 久久艹综合| 在线观看黄色的网站| 天堂资源在线bt种子8| 97人人插| 亚洲一区二区免费| 噜噜吧噜噜色| 性欧美极品| 日本成人小视频| 黄黄的网站| 四虎电影免费观看网站| 天天摸夜夜添夜夜添国产| 综合伊人| 夜夜爽天天操| 伊伊成人网| 亚洲日本黄色| 最近2018中文字幕免费视频| se在线播放|