Nano Hash - криптовалюты, майнинг, программирование

Загрузите изображение Dicom и отобразите его с помощью библиотеки ClearCanvas.

Это очень узкий и конкретный вопрос, но я знаю, что кто-то еще использует его, поэтому я буду держать пальцы скрещенными и надеюсь, что кто-нибудь из вас ответит на этот вопрос.

Я работаю над приложением WPF, одной из частей которого является программа просмотра Dicom. Мы хотели бы использовать сторонний компонент для работы с Dicom, и ClearCanvas — это то, что у нас на данный момент самое лучшее впечатление. Мы можем загрузить файл Dicom и получить атрибуты, но у нас возникают проблемы с размещением данных изображения в свойстве Source элемента управления Image для их отображения. Кто-нибудь подскажет, как это сделать?

Вот код, который я использую для извлечения данных изображения:

var file = new DicomFile(dicomFilePath);
var patientName = file.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = file.DataSet.GetAttribute(DicomTags.PixelData);

Также пытались использовать библиотеку ImageViewer, но это все те же данные.

var localSopDataSource = new LocalSopDataSource(new DicomFile(dicomFilePath));
var patientName = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PatientsName);
var imageData = localSopDataSource.File.DataSet.GetAttribute(DicomTags.PixelData);
30.10.2009

Ответы:


1

Хорошо, я понял это. Возможно, есть еще несколько способов добиться этого, но это то, что я сделал. Теперь у меня есть изображение Wpf, привязанное к свойству, которое предоставляет данные растрового изображения. Ниже приведено свойство, используемое для предоставления данных Bitmap.

public BitmapSource CurrentFrameData
{
    get
    {
        LocalSopDataSource _dicomDataSource = 
            new LocalSopDataSource(_dicomFilePath);
        var imageSop = new ImageSop(_dicomDataSource);

        IPresentationImage presentationImage = 
            PresentationImageFactory.Create(imageSop.Frames[CurrentFrame]);

        int width = imageSop.Frames[CurrentFrame].Columns;
        int height = imageSop.Frames[CurrentFrame].Rows;

        Bitmap bmp = presentationImage.DrawToBitmap(width, height);
        BitmapSource output = Imaging.CreateBitmapSourceFromHBitmap(
          bmp.GetHbitmap(),
          IntPtr.Zero,
          Int32Rect.Empty,
          BitmapSizeOptions.FromWidthAndHeight(width, height));

          return output;
    }
}

Обратите внимание, что это очень простое решение. Можно было бы, например. хотите делать такие вещи, как предварительная загрузка изображений и т. д., чтобы избежать большой нагрузки при прокрутке многокадровых изображений. Но на вопрос «как отобразить изображение» - это должно ответить на него.

07.11.2009
  • stiank81: Не могли бы вы перечислить файлы *.dll, которые вы добавили в свой проект, чтобы сделать это. 18.05.2011
  • Вы пробовали ширину окна на уровне окна, пожалуйста, если да, то как 11.05.2015

  • 2

    Хорошо, мне удалось показать изображение DICOM в Picturebox, используя этот код:

    Вот сборки, которые я использовал:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using ClearCanvas.Common;
    using ClearCanvas.Dicom;
    using System.Windows.Media.Imaging;
    using ClearCanvas.ImageViewer;
    using ClearCanvas.ImageViewer.StudyManagement;
    using System.Windows.Interop;
    using System.Windows.Media;
    using System.Windows;
    using System.IO;
    

    Мне также пришлось скопировать эти dll в bin/debug:

    BilinearInterpolation.dll (эту я не мог сослаться на нее как на сборку, поэтому я просто скопировал ее в папку bin/degug)

    WindowsBase.dll (на этот я смог сослаться как на сборку)

    Код (в моем проекте есть кнопка, которая позволяет выбрать файл dcm, а затем показать его в окне изображения)

    Private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "DICOM Files(*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                if (ofd.FileName.Length > 0)
                {
    
                    var imagen = new DicomFile(ofd.FileName); 
    
                    LocalSopDataSource DatosImagen = new LocalSopDataSource(ofd.FileName); 
    
            ImageSop imageSop = new ImageSop(DatosImagen);
    
            IPresentationImage imagen_a_mostrar = PresentationImageFactory.Create(imageSop.Frames[1]); 
    
            int width = imageSop.Frames[1].Columns; 
    
            int height = imageSop.Frames[1].Rows; 
    
            Bitmap bmp = imagen_a_mostrar.DrawToBitmap(width, height); 
    
            PictureBox1.Image = bmp; 
    
    
    
                imageOpened = true;
    
                }
                ofd.Dispose();
            }
        }
    
    14.07.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..