如何在R中处理多个Jpeg图片

3

我刚开始使用RStudio,因为可用的分析图像的包是R语言编写的。我只想分析存储在一个文件夹中的50张图片。如何通过循环读取每个图像,对每张图片执行一些操作并将输出结果(我的输出结果是一个列表)保存为向量?

更新:

我刚刚编写了一段代码,如下所示:

folder <- "F:/F_diff/1_d/glass/New folder/"      # path to folder that holds multiple .jpg files
file_list <- list.files(path=folder, pattern="*.jpg") # create list of all .jpg files in folder

for (i in 1:length(file_list)){
  assign(file_list[i],   
     #read image
     im2 <- readImage(paste(folder, file_list[i], sep=''))

     #analyze each image
     B <- matrix(im2,nrow=808,ncol=610,byrow=FALSE, dimnames=NULL)
     Haarimtest <- TOS2D(B, smooth = FALSE, nsamples = 100)
     summary(Haarimtest)

 )}

我遇到了以下错误:
错误:在以下内容中出现意外符号: “#analyze each image B” Haarimtest <- TOS2D(B, smooth = FALSE, nsamples = 100) 错误:base::log2(x)中的非数学函数参数 summary(Haarimtest) 错误:未找到对象“Haarimtest” )} 错误:在“)”中出现意外“)” 更新2 经过一些代码调整和大量搜索,我成功运行了它。 该代码首先从文件夹导入大小为64x64像素的30张.tif图像,并对每张图像执行一些图像分析。 更新后的代码如下:
> library(tiff) 
  library(LS2W) 
  library(LS2Wstat)
> # path to folder that holds multiple .tif files 
  path <- "C:/Users/Metaheuristics/Documents/MATLAB/diff_64 x64/2D/" 
> # create list of all .tif files in folder 
  files <- list.files(path=path, pattern="*.tif") 
> 
> #import all files  
  for(file in files) {   
  perpos <- which(strsplit(file, "")[[1]]==".")   
  assign(
> gsub(" ","",substr(file, 1, perpos-1)), 
> B<-readTIFF(paste(path,file,sep="")))
> 
  #perform image analysis on individual images   
  Haarimtest <- TOS2D(B, smooth = FALSE, nsamples = 100)            
  summary(Haarimtest)   
  }

只有一个问题,我无法保存结果。


如果您知道如何读取一个图像文件,那么您可以类似于https://dev59.com/Smgu5IYBdhLWcg3wTFSi进行操作。 - jogo
1
查看以下两个与R语言相关的帖子:在R中遍历目录中的所有文件如何在R中读取jpeg图片 - Imran Ali
您好,欢迎来到 Stack Overflow。请仔细阅读如何正确提问的规则:http://stackoverflow.com/help/how-to-ask。这是一个有趣的问题,但如果您没有提供您所尝试的代码和用于分析图像的软件包,那么我们无法给出满意的答案。 - Joris Meys
我正在使用LS2Wstat软件包(https://www.rdocumentation.org/packages/LS2Wstat/versions/2.0-3),它是用于纹理图像的空间平稳性的多尺度测试。这些纹理图像是从光学实验中获得的激光散斑场。 - Siddharth Rawat
文档说明TOS2D()函数需要将图像作为其中一个参数,而您提供的是矩阵B,我建议您传递im2作为参数,而不是B - Imran Ali
显示剩余3条评论
1个回答

1
尽管这个问题看起来已经有两年了,但我遇到了类似的问题并找到了解决方案。
在你的 for 循环之前,添加:df <- NULL,在你的代码行之后添加:
Haarimtest <- TOS2D(B, smooth = FALSE, nsamples = 100)

只需在for循环内添加

df<-rbind(df,data.frame(file,Haarimtest))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接