使用均值和标准差对R中的图像进行归一化

时间:2019-03-22 19:16:57

标签: python r image tensorflow normalize

Noob机器学习者在这里!

我正试图对R中的图像进行规范化,因为我打算将其提交到R中的用于野生生物图像分类的机器学习MLWIC)包中

该软件包的作者提到,在对图像进行分类之前,应将它们调整为256 x 256像素(足够容易),然后进行规格化。他们引用了本附录(Norouzzadeh et al 2018code here)中可用的方法。

简而言之,归一化过程是使用python命令执行的,该命令针对图像中的每个颜色通道“减去均值并除以像素的方差”。

他们使用的python函数的文档,tf.image.per_image_standardization()指出:

  

线性缩放图像以使其均值和单位方差为零。   该操作会计算(x-平均值)/ Adjusted_stddev,其中mean是图像中所有值的平均值,并且Adjusted_stddev = max(stddev,1.0 / sqrt(image.NumElements()))。

如果我尝试在R中复制此过程。但是,当我尝试重写R中的tf.image.per_image_standardization()函数时,它将图像从每个颜色通道中的[0,1]范围更改为例如-1.85至1.85的范围。 。生成的图像看起来不像附录中显示的饱和图像,链接到上方。

这是原始图片:

animal_original

这是应该看起来是经过处理的图像:

enter image description here

我尝试过的代码:

library(imager)
library(tidyverse)
ante <- load.image("original.jpg")
plot(ante)
normalize <- function(x) (x - mean(x))/sd(x)
ante %>% 
  imsplit("c") %>% 
  modify_at(1, normalize) %>% 
  modify_at(2, normalize) %>% 
  modify_at(3, normalize) %>% 
  imappend("c") %>% 
  plot()

我还尝试了以下操作,所得到的图像看起来比原始图像更饱和,但是它不使用均值或sd ...

library(magick)
process_image <- function(image.path, new.image.path){
  tryCatch(
    {
      image_write(image_equalize(image_scale(image_read(image.path),"256x256!")), path = new.image.path)
      return(substr(image.path, nchar(image.path) - 2, nchar(image.path)))
    },
    error = function(e)  
    {
      return(NA)
    }
  )
}
process_image("original.jpg", "processed.jpg")

我在做什么错了?

0 个答案:

没有答案