DicomObjects.NET.8.48 Documentation
DicomObjects Namespace / DicomDataSet Class / PixelValuesByFrameGeneric Method
The 1-based frame number to retrieve
Controls whether to apply the scale/offset or Modality LUT if present
Example

In This Topic
    PixelValuesByFrameGeneric Method (DicomDataSet)
    In This Topic
    Returns an array of pixel values for a frame, optionally transformed via the modality transformation. Also accssible from
    Syntax
    'Declaration
     
    
    Public Function PixelValuesByFrameGeneric( _
       ByVal frame As System.Integer, _
       ByVal modalityTransform As System.Boolean _
    ) As System.Array
    public System.Array PixelValuesByFrameGeneric( 
       System.int frame,
       System.bool modalityTransform
    )

    Parameters

    frame
    The 1-based frame number to retrieve
    modalityTransform
    Controls whether to apply the scale/offset or Modality LUT if present

    Return Value

    Array of values representing the (possibly transformed) pixel values. Return type is a generic array as opposed to DicomImage.PixelValuesByFrame which returns a float[]
    Remarks
    Even if modalityTransform is false, the values are still masked to the relevant bit length and interpreted as sign/unsigned. This differs from DicomImage.RawPixelValuesByFrame.
    Example
    DicomDataSet ds = new DicomDataSet("Dataset.dcm");
    int frame = 10;
                        
     bool modalityTransform = true;
     var rawPixelsValues = ds.PixelValuesByFrameGeneric(frame, modalityTransform);
     
     modalityTransform = false;
     var transformedPixelsValues = ds.PixelValuesByFrameGeneric(frame, modalityTransform);
     
     if (rawPixelsValues is ushort[] ushortPixels)
     {
        ushort min = ushortPixels.Min();
        ushort max = ushortPixels.Max();
        double avg = ushortPixels.Average(p => (double)p);        
        double stdDev = Math.Sqrt(ushortPixels.Select(p => Math.Pow(p - avg, 2)).Average());
        
        Console.WriteLine($"Min: {min}, Max: {max}, Avg: {avg:F2}, StdDev: {stdDev:F2}");
     }
     else if (rawPixelsValues is byte[] bytePixels)
     {
        byte min = bytePixels.Min();
        byte max = bytePixels.Max();
        double avg = bytePixels.Average(p => (double)p);
        double stdDev = Math.Sqrt(bytePixels.Select(p => Math.Pow(p - avg, 2)).Average());
        
        Console.WriteLine($"Min: {min}, Max: {max}, Avg: {avg:F2}, StdDev: {stdDev:F2}");
     }
     else if (rawPixelsValues is short[] shortPixels)
     {
        short min = shortPixels.Min();
        short max = shortPixels.Max();
        double avg = shortPixels.Average(p => (double)p);
        double stdDev = Math.Sqrt(shortPixels.Select(p => Math.Pow(p - avg, 2)).Average());
        
        Console.WriteLine($"Min: {min}, Max: {max}, Avg: {avg:F2}, StdDev: {stdDev:F2}");
     }
    Requirements

    Target Platforms: .NET CLR 4.8 or higher

    See Also