【matlab图像处理】图像的算术运算实践
中國史之【推行國野制】:
國野制產(chǎn)生于周初的武力征服,是西周的社會(huì)等級(jí)制度。國是統(tǒng)治宗族聚居的城郭和郊區(qū),野則是被征服者散居的鄙野。國人享有一定的權(quán)利,是周朝軍隊(duì)的主力。野人的義務(wù)則是農(nóng)業(yè)生產(chǎn),是井田制下的勞動(dòng)者。
——來源:全歷史APP
俗話說:“好記性不如爛筆頭”,多寫寫多記記,總不會(huì)錯(cuò)。多一些不為什么的堅(jiān)持,少一些功利主義的追求。
今天介紹圖像的算術(shù)運(yùn)算實(shí)踐。單看課本知識(shí),不去動(dòng)手,難以體會(huì)到視覺效果的沖擊感。本內(nèi)容參考自《實(shí)用MATLAB圖像和視頻處理》第6章。
- 對(duì)于matlab2021的安裝,可以參考公眾號(hào)【CV之道】的文章:【matlab安裝】手把手圖文并茂安裝matlab2021(win10版)
圖像處理工具包中提供了4個(gè)函數(shù)用于進(jìn)行圖像算術(shù)運(yùn)算,分別是imadd、imsubtract、immultiply、imdivide。工具包內(nèi)的函數(shù)會(huì)自動(dòng)處理溢出問題。
1、圖像加法–imadd
圖像加法可通過對(duì)每個(gè)像素值加一個(gè)常數(shù)值來使圖像變亮。它也可以用來將兩幅圖像混合成一幅圖像。編碼如下:
首先,新建一個(gè)腳本,然后編寫相關(guān)代碼,然后點(diǎn)運(yùn)行。這里我出現(xiàn)了錯(cuò)誤,錯(cuò)誤提示為“不支持將腳本imadd作為函數(shù)執(zhí)行”,這是因?yàn)閕madd是圖像工具包的內(nèi)置函數(shù),所以我不能再命名我的腳本為imadd.m,需要重命名。我重命名為img_add.m,最終運(yùn)行效果如下:
我們也可以使用imadd函數(shù)來混合兩幅圖像,代碼和效果如下:
Respect to kobe。這效果還不錯(cuò)吧,就一句函數(shù),學(xué)會(huì)圖像處理,最直接的好處就是不需要再去學(xué)PS。
2、圖像減法–imsubtract
圖像減法和加法是類似的操作,它可以減去一個(gè)標(biāo)量使圖像變暗,也可以兩幅圖像相減,來找出他們之間的差異。這在于比較兩幅圖像是否相同時(shí)很有用。代碼和效果如下:
%使用函數(shù)imsubtract來對(duì)所有像素值減一個(gè)常數(shù),以變暗一幅圖像 I = imread('star.jpg'); I2 = imsubtract(I , 75); figure subplot(1,2,1), imshow(I), title('star'); subplot(1,2,2), imshow(I2), title('Darker star');%使用函數(shù)imsubtract來比較兩幅圖像 img1 = imread('kobe.jpg'); img2 = imread('star.jpg'); img3 = imsubtract(img1, img2); figure subplot(1,3,1), imshow(img1), title('kobe'); subplot(1,3,2), imshow(img2), title('star'); subplot(1,3,3), imshow(img3), title('kobe in star');
3、圖像乘法–immultiply
圖像乘法將兩幅圖像中具有相同坐標(biāo)的像素值相乘。這可用在稱為動(dòng)態(tài)放縮的增亮過程中,相比對(duì)每個(gè)像素加個(gè)常數(shù)的操作,其變亮效果更加自然。其效果圖如下:
%使用函數(shù)immultiply來動(dòng)態(tài)放縮圖像,以達(dá)到變亮效果 I = imread('moon.tif'); I2 = imadd(I , 50); I3 = immultiply(I, 1.2); figure subplot(1,3,1), imshow(I), title('original image'); subplot(1,3,2), imshow(I2), title('normal brightening'); subplot(1,3,3), imshow(I3), title('dynamic scaling');
從上面的結(jié)果可以明顯看出,如果只是單純的對(duì)像素值加一個(gè)標(biāo)量,其整個(gè)圖片都會(huì)顯得蒼白(如中間圖片所示)。如果使用動(dòng)態(tài)放縮,它的增亮細(xì)節(jié)會(huì)更加清晰,對(duì)比度更好。
另外,圖像乘法也可以產(chǎn)生一些特殊的效果,比如人工的3D外觀。將一幅平坦的圖像與梯度相乘就可以產(chǎn)生3D紋理表面的錯(cuò)覺。代碼如下:
%使用函數(shù)immultiply來生成一個(gè)人工3D的行星 img1 = im2double(imread('earth1.tif')); img2 = im2double(imread('earth2.tif')); img3 = immultiply(img1, img2); figure subplot(1,3,1), imshow(img1), title('Planet Image'); subplot(1,3,2), imshow(img2), title('Gradient'); subplot(1,3,3), imshow(img3), title('3D Planet');
呃,其實(shí)3D效果并不是很明顯。。
4、圖像除法–imdivide
圖像除法可用作動(dòng)態(tài)放縮的翻轉(zhuǎn)操作。當(dāng)然,同樣的效果可以使用函數(shù)immultiply實(shí)現(xiàn)。代碼和效果如下:
%使用函數(shù)imdivide來動(dòng)態(tài)放縮圖像,以達(dá)到變暗效果 I = imread('moon.tif'); I2 = imdivide(I , 2); I3 = immultiply(I, 0.5); figure subplot(1,3,1), imshow(I), title('original image'); subplot(1,3,2), imshow(I2), title('Darker w/ Division'); subplot(1,3,3), imshow(I3), title('Darker w/ Multiplication');
圖像除法的另一個(gè)用途是從一幅圖像中提取背景。這常用作一個(gè)復(fù)雜操作的預(yù)處理步驟。我們先看看要處理的文檔圖像如下:
這幅圖像可以代表一個(gè)文檔,它是在不均勻的光照條件下掃描得到的。因?yàn)楸尘暗木壒?#xff0c;這幅圖像中的文字不能直接處理,即需要先對(duì)圖像進(jìn)行預(yù)處理,然后才能處理文字。
如果背景是均勻的,可使用閾值化來從背景中提取文字像素。閾值化是一種簡單地將一幅圖像轉(zhuǎn)換成其二值圖的過程。
比較好理解,就是定義一個(gè)閾值作為臨界值,低于該閾值的像素被設(shè)置為全黑像素,而高于閾值的設(shè)置為全白像素。我們用代碼驗(yàn)證一下可不可用閾值來解決這個(gè)問題。
%使用閾值來提取前背景 level = graythresh(text); BW = im2bw(text, level); figure, imshow(BW)
其效果如上,我們使用內(nèi)置函數(shù)graythresh來設(shè)置一個(gè)閾值,但其并不能很好將文字和背景區(qū)分開,僅得到部分需要的文字。
如果我們有機(jī)會(huì)得到圖片的背景圖片,那么使用函數(shù)imdivide就可以提取出前景。在實(shí)際中(如掃描文檔)得到這樣的背景圖像,有可能需要掃描一張僅有非均勻光照背景的黑紙。代碼和效果如下:
%用圖像除以背景來消除背景 fixed = imdivide(text, notext); figure subplot(1,3,1), imshow(text), title('original Image'); subplot(1,3,2), imshow(notext), title('Background Only'); subplot(1,3,3), imshow(fixed, []), title('Divided Image');
從上面的效果可以看到,如果我們拿到背景圖后,可以很簡單地圖像相除即可得到清晰的文字內(nèi)容。難就難在背景圖不好得到。
以上是本期內(nèi)容,建議自己動(dòng)手來實(shí)踐一下。如果需要圖片和代碼,可以關(guān)注公眾號(hào),回復(fù)關(guān)鍵字【matlab代碼】即可獲得。我會(huì)上傳到云盤。
【聲明】:學(xué)習(xí)筆記基于互聯(lián)網(wǎng)上各種學(xué)習(xí)資源的個(gè)人整理。
以上是本期內(nèi)容,下期介紹圖像處理的邏輯運(yùn)算實(shí)踐。
我叫小保,一名計(jì)算機(jī)視覺愛好者、學(xué)習(xí)者、追隨者,歡迎關(guān)注我一起學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的【matlab图像处理】图像的算术运算实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下录制并制作Gif图片
- 下一篇: 分库分表之_分库分表 + 复杂查询