欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解R語言圖像處理EBImage包

 更新時間:2022年02月10日 10:03:14   作者:jiabiao1602  
EBImage是R的一個擴展包,提供了用于讀取、寫入、處理和分析圖像的通用功能,非常容易上手,本文給大家介紹下R語言圖像處理EBImage包的相關(guān)知識,感興趣的朋友一起看看吧

本文摘自《Keras深度學(xué)習(xí):入門、實戰(zhàn)及進階》第四章部分章節(jié)。

什么是EBImage

EBImage是R的一個擴展包,提供了用于讀取、寫入、處理和分析圖像的通用功能,非常容易上手。EBImage包在Bioconductor中,通過以下命令進行安裝。

install.packages("BiocManager")
BiocManager::install("EBImage")

EBImage安裝后,可以通過以下命令將其加載到R中。

library("EBImage")

1. 圖像讀取與保存

EBImage的基本功能包括圖像的讀取、顯示和寫入。使用readImage()函數(shù)讀取圖像,函數(shù)中的參數(shù)files表示需要讀取的文件名或URL,參數(shù)type表示讀取的圖像文件格式,目前支持jpeg、jpg和tiff三種圖像文件格式。
首先,將我們將一張圖像格式為jpg文件的灰色圖像加載到R中。我們可以通過display()函數(shù)對剛剛加載的圖像進行可視化

> img <- readImage('../images/cat.jpg')
> display(img ,method = 'browser')

當display()函數(shù)的參數(shù)method為“browser”時,在R中運行命令后將在默認Web瀏覽器中打開圖像,在RStudio中運行命令后將在View窗口打開可交互的圖像。使用鼠標或者鍵盤快捷鍵可以放大或縮小圖像、平移或循環(huán)顯示多個圖像。當參數(shù)method為“raster”時,就在當前設(shè)備上繪制靜態(tài)圖像,我們還可以利用R的低級繪圖函數(shù)在圖像上添加其他元素。運行以下程序代碼將在圖像上添加文本標簽

> display(img,method = 'raster')
> text(x = 20,y = 20,label = 'cat',adj = c(0,1),col = 'orange',cex = 2)

上面示例讀入的是黑白圖像(或稱灰色圖像),readImage()和display()函數(shù)也可以輕松讀入彩色照片。

> imgcol <- readImage('../images/cat-color.jpg')
> display(imgcol,method = 'raster')

2.色彩管理

colorMode()函數(shù)可用于訪問和更改此屬性,修改圖像的渲染模式。在下一個例子中,我們將一張彩色圖像的模式變?yōu)榛疑℅rayscale),那么該圖像將不再顯示單一的彩色圖像,而是轉(zhuǎn)換為三幀的灰色圖像,分別對應(yīng)紅、綠、藍三個通道。colorMode()函數(shù)只會改變EBImage渲染圖像的方式,并不會改變圖像的內(nèi)容。運行以下程序代碼,將一個彩色圖像渲染為一個具有3幀(紅色通道、綠色通道、藍色通道)的灰色圖像。

> colorMode(imgcol) <- Grayscale
> display(imgcol,method = 'raster',all = TRUE,nx = 3)

我們可以使用更靈活的channel()函數(shù)進行色彩空間轉(zhuǎn)換,可以將灰色圖像轉(zhuǎn)換為彩色圖像,也可以從彩色圖像中提取顏色通道。與colorMode()函數(shù)不同,channel()函數(shù)還可以更改圖像的像素強度值。asred、asgreen和asblue轉(zhuǎn)換模式可以將灰色圖像或數(shù)組轉(zhuǎn)換為指定色調(diào)的彩色圖像,此時圖形數(shù)據(jù)也將從二維變成三維。

> img_asgreen <- channel(img,'asgreen')
> dim(img)
[1] 1920 1080
> dim(img_asgreen)
[1] 1920 1080    3

3.圖像處理

作為數(shù)值數(shù)組,可以使用R的任何算數(shù)運算符方便地操作圖像。例如,我們可以通過簡單地利用其最大值減去圖像數(shù)據(jù)來生成負圖像。

> img_neg <- max(img) - img
> img_comb <- combine(img,img_neg) TRUE)

我們還可以通過加法來增加圖像的亮度,通過相乘來調(diào)整對比度,以及通過求冪來應(yīng)用伽瑪校正。

> img_comb1 <- combine(
+   img,
+   img + 0.3,
+   img * 2,
+   img ^ 0.5
+ )
> display(img_comb1,method = 'raster',all=TRUE)

我們可以使用標準矩陣的子集選取方式對圖像進行裁剪。比如我們通過選取Image類的部分數(shù)據(jù)用于繪制貓咪的頭像

> img_crop <- img[800:1700, 100:950]
> plot(img_crop)

4.空間變換

對于灰色圖像,可以使用R基礎(chǔ)包的t()函數(shù)或者EBImage擴展包的transpose()函數(shù)進行轉(zhuǎn)置。

> img_t <- transpose(img) # 等價于 img_t <- t(img)
> plot(img_t)

對于彩色圖像,我們不能使用t()函數(shù),而是需要使用transpose()函數(shù)對其進行轉(zhuǎn)置,其能通過交換空間維度來置換圖像。

> t(imgcol) # 報錯
Error in t.default(imgcol) : argument is not a matrix
> imgcol_t <- transpose(imgcol)
> plot(imgcol_t)

除了轉(zhuǎn)置,我們還有更多關(guān)于圖像的空間變換,例如平移、旋轉(zhuǎn)、反射和縮放。translate()函數(shù)通過指定的二維向量移動圖像平面,裁剪圖像區(qū)域外的像素,并將進入圖像區(qū)域的像素設(shè)置為背景。參數(shù)v是由兩個數(shù)字組成的向量,表示以像素為單位的平移向量。以下代碼實現(xiàn)將圖像往右移動100像素,往上移動50像素。

> img_rotate <- rotate(img,30)
> plot(img_rotate)

使用resize()函數(shù)可以將圖像進行縮放,如果僅提供寬度或者高度之一,則將自動計算另一個尺寸并保持原始寬高比。以下代碼實現(xiàn)將img、imgcol圖像的寬、高均設(shè)置為256。

> # 調(diào)整圖像尺寸
> img_resize <- resize(img,w = 256,h = 256)
> imgcol_resize <- resize(imgcol,w = 256,h = 256)
> par(mfrow=c(1,2))
> plot(img_resize)
> plot(imgcol_resize)
> par(mfrow=c(1,1))

flip()和flop()函數(shù)分別圍繞水平軸和垂直軸反射圖像。

> img_flip <- flip(img)
> img_flop <- flop(img)
> display(combine(img_flip, img_flop), 
+         all=TRUE,method = 'raster')

affine()函數(shù)可以實現(xiàn)空間線性變換,其中像素坐標(用矩陣px表示)轉(zhuǎn)換為cbind(px, 1)%*%m。

> m <- matrix(c(1,-.5,128,0,1,0),nrow=3,ncol=2)
> img_affine <- affine(img, m)
> display(img_affine)

5.形態(tài)運算

二值圖像是僅包含兩組像素的圖像,其值為0和1,分別表示背景像素和前景像素。這樣的圖像要經(jīng)歷幾種非線性的形態(tài)學(xué)運算:侵蝕、膨脹、打開和閉合。這些操作通過以下方式在二進制圖像上覆蓋一個稱為結(jié)構(gòu)元素的掩碼來工作:

  • 腐蝕:對于每個前景像素,在其周圍放置一個遮罩,如果遮罩覆蓋的任何像素來自背景,請將其設(shè)置為背景。
  • 膨脹:對于每個背景像素,在其周圍放置一個蒙版,如果蒙版覆蓋的任何像素都來自前景,請將像素設(shè)置為前景。

我們首先讀入一個二值圖像,然后利用markBrush()函數(shù)創(chuàng)建一個形狀為diamond,大小為3的濾波器,再通過erode()函數(shù)對二值圖像進行腐蝕、dilate()函數(shù)對圖像進行膨脹。

> shapes <- readImage('../images/shapes.jpg')
> kern = makeBrush(3, shape='diamond')
> shapes_erode= erode(shapes, kern) # 腐蝕
> shapes_dilate = dilate(shapes, kern) # 膨脹
> display(combine(shapes,shapes_erode, shapes_dilate), 
+         all=TRUE,method = 'raster',nx = 3)

6.圖像分割

圖像分割是指對圖像進行分割,通常用于識別圖中的對象。非接觸連接的對象可以使用bwlabel()函數(shù)進行分段,而watershed()與propagate()函數(shù)能夠用更復(fù)雜的算法分離彼此接觸的對象。
bwlabel()函數(shù)查找除背景以外的每個相連像素集,并用唯一遞增的整數(shù)重新標記這些集??梢栽趲ч撝档亩M制圖像上調(diào)用它以提取對象。

> shapes_label <- bwlabel(shapes)
> table(shapes_label)
shapes_label
?0 ? ? 1 ? ? 2 ? ? 3 ? ? 4 ? ? 5 ? ? 6 ? ? 7 ? ? 8 ? ? 9 ? ?10 ? ?11 ? ?12 ? ?13 ? ?14 ? ?15?
16821 ? 398 ? 129 ? 135 ? 11 ? 147 ? ?81 ? 109 ? ?60 ? ?87 ? ?93 ? ?81 ? ?78 ? 100 ? ?87 ? ?15?
> max(shapes_label)
[1] 15

shapes_label圖像的像素值范圍從0(對應(yīng)于背景)到其包含的對象數(shù),最大值為15。
我們利用normalize()函數(shù)對其進行(0,1)范圍內(nèi)的標準化,這將導(dǎo)致不同的對象以不同的灰色陰影渲染

> display(normalize(shapes_label),method = 'raster') # 灰色渲染

可視化分割的另一種方式是使用colorLabels()函數(shù),該函數(shù)通過唯一顏色的隨機排列對對象進行顏色編碼。

> display(colorLabels(shapes_label),method = 'raster') # 彩色渲染

EBImage將對象掩碼定義為具有相同唯一整數(shù)值的一組像素。通常,包含對象掩碼的圖像就是分割函數(shù)的結(jié)果,如bwlabel、watershed或propagate。通過rmObject()函數(shù)可以將對象從這些圖像中刪除,只需將對象的像素值設(shè)置為0就可以從掩碼中刪除對象。默認情況下,在刪除對象之后,所有剩余的對象都會被重新標記,以便最高對象ID對應(yīng)于掩碼中的對象數(shù)量。參數(shù)reenumerate可用于更改此行為并保留原始對象id。
我們需要將RstudioKeras對象中的“”移除,通過以下程序代碼實現(xiàn)。

> z <- rmObjects(shapes_label,15) # 移除"_"
> display(z,method = 'raster')

到此這篇關(guān)于R語言圖像處理EBImage包詳解的文章就介紹到這了,更多相關(guān)R語言圖像處理EBImage內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • R語言中的五種常用統(tǒng)計分析方法

    R語言中的五種常用統(tǒng)計分析方法

    這篇文章主要介紹了R語言中的五種常用統(tǒng)計分析方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 淺析R語言中map(映射)與reduce(規(guī)約)

    淺析R語言中map(映射)與reduce(規(guī)約)

    大家在R語言數(shù)據(jù)處理中非常常見map(映射)與reduce(規(guī)約)操作,map表示映射,可以在一個或多個列表/向量的每個位置上應(yīng)用相同函數(shù)進行計算而reduce函數(shù)表示規(guī)約,計算向量中相鄰的兩個元素,本文給大家介紹R語言map與reduce的相關(guān)知識,感興趣的朋友一起看看吧
    2021-05-05
  • R語言函數(shù)基礎(chǔ)知識點總結(jié)

    R語言函數(shù)基礎(chǔ)知識點總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于R語言函數(shù)基礎(chǔ)知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-04-04
  • R語言ggplot2包之注釋方式

    R語言ggplot2包之注釋方式

    這篇文章主要介紹了R語言ggplot2包之注釋方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言繪圖大小設(shè)定的操作

    R語言繪圖大小設(shè)定的操作

    這篇文章主要介紹了R語言繪圖大小設(shè)定的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言變量重編碼、重命名的操作

    R語言變量重編碼、重命名的操作

    這篇文章主要介紹了R語言變量重編碼、重命名的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言rhdf5讀寫hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù)

    R語言rhdf5讀寫hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù)

    這篇文章主要為大家介紹了R語言rhdf5讀寫hdf5并展示文件組織結(jié)構(gòu)和索引數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • R語言實現(xiàn)各種數(shù)據(jù)可視化的超詳細教程

    R語言實現(xiàn)各種數(shù)據(jù)可視化的超詳細教程

    Python語言越來越流行,尤其是在機器學(xué)習(xí)與深度學(xué)習(xí)等領(lǐng)域,但是R語言在數(shù)據(jù)分析與可視化方面仍然具有絕對的優(yōu)勢,下面這篇文章主要給大家介紹了關(guān)于R語言實現(xiàn)各種數(shù)據(jù)可視化的超詳細教程,需要的朋友可以參考下
    2022-11-11
  • R語言中qplot()函數(shù)的用法說明

    R語言中qplot()函數(shù)的用法說明

    這篇文章主要介紹了R語言中qplot()函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言表達式知識點總結(jié)

    R語言表達式知識點總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于R語言表達式知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-03-03

最新評論