首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从高维三维阵列中获取统计矢量?

如何从高维三维阵列中获取统计矢量?
EN

Stack Overflow用户
提问于 2022-07-30 19:03:35
回答 1查看 33关注 0票数 3

我正在从事一个图像缺陷聚类项目。每幅图像都与特定的缺陷类型(以及使用readJPEG的3d像素数组)相关联。

图像的一个示例如下:https://i.stack.imgur.com/pO9XY.jpg

代码语言:javascript
复制
library(jpeg)
im <- readJPEG("C:/Users/Rayane_2/Desktop/Data/PCB1/PCB/PCB_USED/01.jpg")
dim(im)
[1] 1586 3034    3

所需的过程描述如下:

代码语言:javascript
复制
For each picture in specific directory :

1/ Convert the JPG picture to a 3d array ** ( RGB data of jpg image is a 3d array ). 

2/ Summarize that 3d array in a **vector** of statistics using a function like `stats()` . 

3/ Return this vector and continue to build a full clustering dataset. 

我正在搜索将im[,,1]im[,,2]im[,,3]转换为向量as.vector()

在此之后,我需要提取一些统计数据,比如:

代码语言:javascript
复制
stats <-function(im){

return(c(min(as.vector(im[,,1])),max(as.vector(im[,,1])),sum(as.vector(im[,,1])),range(as.vector(im[,,1])),var(as.vector(im[,,1])), min(as.vector(im[,,2])),max(as.vector(im[,,2])),sum(as.vector(im[,,2])),range(as.vector(im[,,2])),var(as.vector(im[,,2])),min(as.vector(im[,,3])),max(as.vector(im[,,3])),sum(as.vector(im[,,3])),range(as.vector(im[,,3])),var(as.vector(im[,,3])))

}

可以使用r包(如descr() in {summarytools} )获取当前统计信息,请参阅R统计软件包

由于im 三维数组的高维,运行速度非常慢

代码语言:javascript
复制
dim(im)
[1] 1586 3034    3

问题:

我正在寻找可能的解决方案,还有其他的R函数/包可以非常快地完成这样的任务吗?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-30 19:18:21

我们可以使用applyMARGIN = 3遍历第三维空间。

代码语言:javascript
复制
out <- apply(im, 3, function(x) c(min =min(x), max = max(x), sum = sum(x)))

如果有多个文件,请先将它们读入list

代码语言:javascript
复制
lst1 <- lapply(jpgfiles, function(file) apply(readJPEG(file), 3, 
      function(x) c(min = min(x), max = max(x), sum = sum(x))))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73178363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档