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

In This Topic
    PixelValuesByFrame Method
    In This Topic
    Returns a float array of pixel values for a frame, optionally transformed via the modality transformation
    Syntax
    'Declaration
     
    
    Public Function PixelValuesByFrame( _
       ByVal frame As System.Integer, _
       ByVal modalityTransform As System.Boolean _
    ) As System.Single()
    public System.float[] PixelValuesByFrame( 
       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 float values representing the (possibly transformed) pixel values
    Remarks
    Even if modalityTransform is false, the values are still masked to the relevant bit length and interpreted as sign/unsigned. This differs from RawPixelValuesByFrame.
    Example
    DicomImage image = new DicomImage("your_dicom_image.dcm);
                        
    bool modalityTransform = false;
    var rawPixelValues = image.PixelValuesByFrame(1, modalityTransform);
                        
    modalityTransform = true;
    var transformedPixelValues = image.PixelValuesByFrame(1, 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