最有效的存储XY& amp; Z图像文件名

时间:2015-07-28 00:29:35

标签: arrays vb.net class

早上好,

我即将开始一个小型的个人项目,该项目基本上包括一个连接到显微镜的相机,我移动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点)并将它们拼接成一个更大的图像

1 个答案:

答案 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