R語言高級圖像處理
原文http://tecdat.cn/?p=3431
?
ImageMagick庫具有大量功能。本文簡要介紹了最重要的入門概念。
安裝?magick
在的Windows或OS-X上,通過CRAN最容易安裝軟件包。
install.packages("magick")
二進制CRAN包開箱即用。
library(magick)
## Linking to ImageMagick 6.9.9.39
## Enabled features: cairo, fontconfig, freetype, lcms, pango, rsvg, webp
## Disabled features: fftw, ghostscript, x11
str(magick::magick_config())
## List of 21
## ?$ version ? ? ? ? ? :Class 'numeric_version' ?hidden list of 1
## ? ..$ : int [1:4] 6 9 9 39
## ?$ modules ? ? ? ? ? : logi FALSE
## ?$ cairo ? ? ? ? ? ? : logi TRUE
## ?$ fontconfig ? ? ? ?: logi TRUE
## ?$ freetype ? ? ? ? ?: logi TRUE
## ?$ fftw ? ? ? ? ? ? ?: logi FALSE
## ?$ ghostscript ? ? ? : logi FALSE
## ?$ jpeg ? ? ? ? ? ? ?: logi TRUE
## ?$ lcms ? ? ? ? ? ? ?: logi TRUE
## ?$ libopenjp2 ? ? ? ?: logi TRUE
## ?$ lzma ? ? ? ? ? ? ?: logi TRUE
## ?$ pangocairo ? ? ? ?: logi TRUE
## ?$ pango ? ? ? ? ? ? : logi TRUE
## ?$ png ? ? ? ? ? ? ? : logi TRUE
## ?$ rsvg ? ? ? ? ? ? ?: logi TRUE
## ?$ tiff ? ? ? ? ? ? ?: logi TRUE
## ?$ webp ? ? ? ? ? ? ?: logi TRUE
## ?$ wmf ? ? ? ? ? ? ? : logi FALSE
## ?$ x11 ? ? ? ? ? ? ? : logi FALSE
## ?$ xml ? ? ? ? ? ? ? : logi TRUE
## ?$ zero-configuration: logi TRUE
從源構(gòu)建
sudo apt-get install libmagick++-dev
sudo yum install ImageMagick-c++-devel
要在OS-X上從源代碼安裝,您需要imagemagick@6
自制軟件。
brew reinstall imagemagick@6 --with-fontconfig --with-librsvg
brew link --force imagemagick@6
自制軟件中的默認imagemagick配置會禁用一系列功能。
圖像IO
?
讀和寫
可以使用帶有圖像數(shù)據(jù)的文件路徑,URL或原始向量直接讀取圖像image_read
。該image_info
函數(shù)顯示了一些關(guān)于圖像的元型態(tài)數(shù)據(jù),類似于ImageMagick的??identify
命令行實用程序。
print(tiger)
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 400 ? ?400 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
使用我們image_write
以任何格式將圖像導出到磁盤上的文件或內(nèi)存中。
image_write(tiger, path = "tiger.png", format = "png")
?
轉(zhuǎn)換格式
Magick以原始格式將圖像保存在內(nèi)存中。要指定為轉(zhuǎn)換格式其他的format
參數(shù)image_write
。在應(yīng)用轉(zhuǎn)換之前,您還可以在內(nèi)部將圖像轉(zhuǎn)換為其他格式。如果您的原始格式有損,這可能很有用。
tiger_png <- image_convert(tiger, "png")
image_info(tiger_png)
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 400 ? ?400 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
在Linux的上,您使用image_display
在X11窗口中預(yù)覽圖像。
# X11
image_display(tiger)
# 依賴系統(tǒng)
image_browse(tiger)
另一種方法是將圖像轉(zhuǎn)換為光柵對象并將其繪制在R的圖形顯示上。
轉(zhuǎn)換
下面舉幾個例子來了解。
剪切和編輯
轉(zhuǎn)換一些函數(shù)采用一個geometry
參數(shù),該參數(shù)需要表單的特殊語法,AxB+C+D
。其中每個元素都是可選的一些例子:
image_crop(image, "100x150+50")
:裁剪width:100px
并從左側(cè)height:150px
開始+50px
image_scale(image, "200")
:按比例調(diào)整寬度:200px
image_scale(image, "x200")
:按比例調(diào)整高度:200px
image_fill(image, "blue", "+100+200")
:從藍點開始填充x:100, y:200
image_border(frink, "red", "20x10")
:添加左側(cè)+右側(cè)20像素和頂部+底部10px的的邊框
print(frink)
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 220 ? ?445 ? ? ? sRGB ?TRUE ? ?73494 ? 72x72
image_border(image_background(frink, "hotpink"), "#000080", "20x10")
image_trim(frink)
image_crop(frink, "100x150+50")
image_scale(frink, "300") # width: 300px
?
image_scale(frink, "x300") # height: 300px
image_fill
我們可以填補像素point
。fuzz
參數(shù)允許填充具有相似顏色的像素。它的值必須在0到256 ^ 2之間。
過濾器和效果
?
image_noise(frink)
內(nèi)核卷積
image_convolve()
函數(shù)在圖像上應(yīng)用內(nèi)核卷積意味著使用內(nèi)核矩陣中定義的加權(quán)鄰域來重新計算每個像素值例如:
kern <- matrix(0, ncol = 3, nrow = 3)
kern[1, 2] <- 0.25
kern[2, c(1, 3)] <- 0.25
kern[3, 2] <- 0.25
kern
## ? ? ?[,1] [,2] [,3]
## [1,] 0.00 0.25 0.00
## [2,] 0.25 0.00 0.25
## [3,] 0.00 0.25 0.00
此內(nèi)核將每個像素更改為其水平和垂直相鄰像素的平均值,這會在下面的右側(cè)圖像中產(chǎn)生輕微的模糊效果:
img <- image_resize(logo, "300x300")
img_blurred <- image_convolve(img, kern)
image_append(c(img, img_blurred))
使用標準內(nèi)核
文本注釋
最后,在圖像上輸出一些文本會很有用:
image_annotate(frink, "I like R!", size = 70, gravity = "southwest", color = "green")
image_annotate(frink, "The quick brown fox", font = 'Times', size = 30)
支持的大多數(shù)平臺上的字體包括"sans"
,"mono"
,"serif"
,"Times"
,"Helvetica"
,"Trebuchet"
,"Georgia"
,"Palatino"
或"Comic Sans"
。
結(jié)合管道
圖像每個函數(shù)變換不會影響原始圖像。
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 220 ? ?445 ? ? ? sRGB ?TRUE ? ?73494 ? 72x72
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 100 ? ?202 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
組合轉(zhuǎn)換:
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 465 ? ?240 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
使用magrittr
管道語法使其更具可讀性
圖像矢量
以上示例涉及單個圖像。然而,magick中的所有函數(shù)都已經(jīng)過矢量化,以支持使用圖層,合成或動畫。
?
image_scale("200x") %>%
image_quantize(128)
length(earth)
## [1] 44
## ? format width height colorspace matte filesize density
## 1 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
## 2 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
## 3 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
## 4 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
## 5 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
## 6 ? ?GIF ? 200 ? ?200 ? ? ? ?RGB FALSE ? ? ? ?0 ? 72x72
?
圖層
我們可以像在Photoshop中中一樣將圖層堆疊在一起:
## ? format width height colorspace matte filesize density
## 1 ? JPEG ? 300 ? ?225 ? ? ? sRGB FALSE ? ? ? ?0 ? 72x72
## 2 ? ?PNG ? 300 ? ?232 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 3 ? ?PNG ? 148 ? ?300 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
結(jié)合
附加簡單地將框架彼此相鄰:
用于stack = TRUE
將它們放在彼此的頂部:
?
網(wǎng)頁
在閱讀PDF文檔時,每個頁面都成為向量的元素。
## ? ?format width height colorspace matte filesize density
## 1 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 2 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 3 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 4 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 5 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 6 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 7 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 8 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 9 ? ? PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 10 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 11 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 12 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 13 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 14 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 15 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 16 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 17 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 18 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 19 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 20 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 21 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 22 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 23 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 24 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 25 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 26 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 27 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 28 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 29 ? ?PNG ? 612 ? ?792 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
動畫
我們也可以在動畫中制作幀,而不是將矢量元素視為圖層。
創(chuàng)建33變形一系列n
圖像,逐漸將一個圖像變換為另一個圖像。
如果您讀入現(xiàn)有的GIF或視頻文件,則每個幀都會成為一個圖層:
## ? format width height colorspace matte filesize density
## 1 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 2 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 3 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 4 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 5 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 6 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 7 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 8 ? ?GIF ? 150 ? ?148 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
操縱各個幀并將它們放回動畫中:
## ? format width height colorspace matte filesize density
## 1 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 2 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 3 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 4 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 5 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 6 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 7 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 8 ? ?gif ? 200 ? ?155 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
動畫可以保存為MPEG文件的GIF:
繪圖和圖形
該軟件包的它產(chǎn)生一個magick圖像對象。
圖形設(shè)備
該image_graph()
功能打開一個類似于png()
或新的圖形設(shè)備x11()
。它返回將要寫入繪圖的圖像對象。
我們可以使用常規(guī)圖像操作輕松地對圖形進行后處理。
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 400 ? ?400 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
繪圖設(shè)備
使用圖形設(shè)備的另一種方式是使用像素坐標在現(xiàn)有圖像上繪制。
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 220 ? ?445 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
?
默認情況下,image_draw()
將所有邊距設(shè)置為0,并使用圖形坐標匹配圖像大?。ㄒ韵袼貫閱挝唬▽挾萖高度),其中(0,0)是左上角。
動畫圖形
圖形設(shè)備支持多個幀,可以輕松創(chuàng)建動畫圖形。下面的代碼顯示了如何使用magick圖形設(shè)備從gganimate包中實現(xiàn)該示例。
## ? ?format width height colorspace matte filesize density
## 1 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 2 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 3 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 4 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 5 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 6 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 7 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 8 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 9 ? ? gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 10 ? ?gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 11 ? ?gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
## 12 ? ?gif ? 600 ? ?340 ? ? ? sRGB ?TRUE ? ? ? ?0 ? 72x72
要將其寫入文件,您只需執(zhí)行以下操作:
?
OCR文本提取
該軟件包的最新成員是使用OCR從圖像中提取文本:
## ? format width height colorspace matte filesize density
## 1 ? ?PNG ? 640 ? ?480 ? ? ? sRGB ?TRUE ? ?23359 ? 72x72
非常感謝您閱讀本文,有任何問題請在下面留言!
?
最受歡迎的見解
1.使用opencv在python中進行圖像處理的簡介
2.matlab中的偏最小二乘回歸(plsr)和主成分回歸(pcr)
3.matlab中使用vmd變分模態(tài)分解
4.matlab使用hampel濾波去除異常值
5.matlab使用經(jīng)驗?zāi)J椒纸鈋md-對信號進行去噪
6.matlab中的偏最小二乘回歸(plsr)和主成分回歸(pcr)
7.matlab使用copula仿真優(yōu)化市場風險
8.r語言高級圖像處理
9.matlab實現(xiàn)mcmc的馬爾可夫切換arma-garch模型估計
?