早上好,
我即将开始一个小型的个人项目,该项目基本上包括一个连接到显微镜的相机,我移动X和Y舞台,最终将移动Z舞台(焦点/深度)。 / p>
该项目将包含数码相机SDK,因此我可以捕获图像并为它们分配文件名但我的问题是存储文件名的最有效方法是什么,如Z轴上的每个X和Y位置我可能收集从1到大量图像的任何地方,稍后我将通过外部软件将它们堆叠在一起,为每个X& D创建一个焦点堆叠图像。是的。
所以我的问题是,能够存储文件名称的最佳方法是,数组是最好的方法吗?或者有更好的选择(例如带有Z列表的结构化类列表)?
感谢任何反馈,因为我正在尝试将数据存储正确,因为可能存储了大量图像参考。
最后,一旦捕获完成(或可能在此期间),我将循环遍历每个阵列/结构化列表的Z维度,并将文件名引用提供给外部程序,获取堆叠图像然后提供该参考回到另一个ZY数组或列表(无论什么是最有效的)。
我应该澄清我在vb.net工作
非常感谢!
更新
谢谢大家,澄清我会将图像存储在文件系统中,但保留文件中的文件引用(例如文件名)。系统每个整体图像只有一个X和Y坐标,但可能有很多Z。
所以流程将是:
从位置1,1开始,然后拍摄10张不同Z深度的照片,用于存储数组中的文件名
移动到位置1,2然后拍摄10张照片,依此类推。
系统然后将每个x,y点处的每个Z深度拼接在一起以制作一个图像,然后我将使用该图像(来自每个X,Y点)并将它们拼接成一个更大的图像
答案 0 :(得分:2)
您是否将图像保存到文件中?...或者只是将它们保存在内存中?
取决于你的答案......
你可以这样做:
Public Class MicroscopeCapture
Public X, Y, Z As Integer
Public FileName As String
End Class
Public Captures As New List(Of MicroscopeCapture)
或者可能这样:
Public Class MicroscopeCapture
Public X, Y, Z As Integer
Public MicroscopeImage As Image
End Class
Public Captures As New List(Of MicroscopeCapture)
----------编辑----------
这是一个快速示例,演示了如何使用特定的x,y从List中获取集合并按Z排序:
Imports System.IO
Imports System.Resources
Public Class Form1
Private R As New Random
Public Class MicroscopeCapture
Public X, Y, Z As Integer
Public FileName As String
Public Overrides Function ToString() As String
Return String.Format("({0}, {1}, {2}) - {3}", X, Y, Z, FileName)
End Function
End Class
Public Captures As New List(Of MicroscopeCapture)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim counter As Integer
For i As Integer = 1 To 5 ' load up five sets of differnt random microscope capture groups
Dim x As Integer = R.Next(100)
Dim y As Integer = R.Next(100)
Dim z As Integer = R.Next(10, 21)
For focus As Integer = 1 To z
counter = counter + 1
Dim mc As New MicroscopeCapture() With {.X = x, .Y = y, .Z = focus, .FileName = "File" & counter.ToString("00000")}
Captures.Add(mc)
Next
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' grab a random (x, y) coord from the captures:
Dim index As Integer = R.Next(Captures.Count)
Dim x As Integer = Captures(index).X
Dim y As Integer = Captures(index).Y
' grab all the captures with the x,y values sorted by z:
Dim captureSet As List(Of MicroscopeCapture) = GetCaptures(x, y)
For Each mc As MicroscopeCapture In captureSet
Debug.Print(mc.ToString)
Next
End Sub
Private Function GetCaptures(ByVal x As Integer, ByVal y As Integer) As List(Of MicroscopeCapture)
Return Captures.Where(Function(cap) cap.X = x).Where(Function(cap) cap.Y = y).OrderBy(Function(cap) cap.Z).ToList
End Function
End Class