All Projects → reactmed → neurdicom

reactmed / neurdicom

Licence: other
RESTful PACS server with plugins

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to neurdicom

dicomweb-pacs
Easy to use DICOMWEB enabled PACS with DIMSE services based on sqlite database
Stars: ✭ 42 (-56.7%)
Mutual labels:  dicom, pacs, dicomweb
rt-utils
A minimal Python library to facilitate the creation and manipulation of DICOM RTStructs.
Stars: ✭ 89 (-8.25%)
Mutual labels:  dicom, medical-imaging, medical-image-processing
Viewers
The OHIF Medical Imaging Viewer is for viewing medical images. It can retrieve and load images from most sources and formats; render sets in 2D, 3D, and reconstructed representations; allows for the manipulation, annotation, and serialization of observations; supports internationalization, OpenID Connect, offline use, hotkeys, and many more features.
Stars: ✭ 1,753 (+1707.22%)
Mutual labels:  dicom, medical-imaging, medical-image-processing
Dermatron
Dermatology focused medical records software, augmented with computer vision and artificial intelligence [Meteor packaged with Electron]
Stars: ✭ 19 (-80.41%)
Mutual labels:  medical-imaging, medical-image-processing
modelhub
A collection of deep learning models with a unified API.
Stars: ✭ 59 (-39.18%)
Mutual labels:  medical-imaging, medical-image-processing
weasis-chcapi-extension
Weasis plugin adding support for the Google Cloud Healthcare API
Stars: ✭ 12 (-87.63%)
Mutual labels:  dicom, dicomweb
qupath-chcapi-extension
Extension to QuPath application adding support for reading from Google Cloud Healthcare API.
Stars: ✭ 13 (-86.6%)
Mutual labels:  dicom, dicomweb
dicom-dimse-native
node js native addon for dimse services
Stars: ✭ 33 (-65.98%)
Mutual labels:  dicom, pacs
coursera-ai-for-medicine-specialization
Programming assignments, labs and quizzes from all courses in the Coursera AI for Medicine Specialization offered by deeplearning.ai
Stars: ✭ 80 (-17.53%)
Mutual labels:  medical-imaging, medical-image-processing
dicomweb-wsi-viewer
Proof of concept whole slide imaging viewer on top of Google Cloud Healthcare DICOM API.
Stars: ✭ 34 (-64.95%)
Mutual labels:  dicom, dicomweb
Improved-Wasserstein-GAN-application-on-MRI-images
Improved Wasserstein GAN (WGAN-GP) application on medical (MRI) images
Stars: ✭ 23 (-76.29%)
Mutual labels:  medical-imaging, mri-images
radnet
U-Net for biomedical image segmentation
Stars: ✭ 11 (-88.66%)
Mutual labels:  mri-images, medical-image-processing
clara-dicom-adapter
DICOM Adapter is a component of the Clara Deploy SDK which facilitates integration with DICOM compliant systems, enables ingestion of imaging data, helps triggering of jobs with configurable rules and offers pushing the output of jobs to PACS systems.
Stars: ✭ 31 (-68.04%)
Mutual labels:  dicom, medical-imaging
Brain-MRI-Segmentation
Smart India Hackathon 2019 project given by the Department of Atomic Energy
Stars: ✭ 29 (-70.1%)
Mutual labels:  medical-imaging, mri-images
healthcare-dicom-dicomweb-adapter
Adapter which transforms DIMSE requests to DICOMweb requests
Stars: ✭ 92 (-5.15%)
Mutual labels:  dicom, dicomweb
dicomifier
A medical image converter
Stars: ✭ 22 (-77.32%)
Mutual labels:  dicom, medical-imaging
dicom-standard-chinese
Chinese translation of DICOM standard, DICOM协议中文版
Stars: ✭ 26 (-73.2%)
Mutual labels:  dicom, pacs
visualqc
VisualQC : assistive tool to ease the quality control workflow of neuroimaging data.
Stars: ✭ 56 (-42.27%)
Mutual labels:  medical-imaging, mri-images
DICOM.jl
Julia package for reading and writing DICOM (Digital Imaging and Communications in Medicine) files
Stars: ✭ 45 (-53.61%)
Mutual labels:  dicom, pacs
NMRI
2D Fourier Transform of Nuclear Magnetic Resonance Imaging raw data
Stars: ✭ 13 (-86.6%)
Mutual labels:  medical-imaging, medical-image-processing

Welcome to NeurDICOM documentation

Welcome to everyone

Hello, everyone! I'm very excited that Github's community is interested in my project. Unfortunatly, this project needs improvements in performance and stability. I plan to rewrite some code and replace technologies which I used in first version. It would be great if you bring new fresh ideas to enhance application.


NeurDICOM is portable and easy-to-deploy RESTful DICOM and PACS server that allows physicians to use state-of-the-art methods of machine learning and neural networks to make a diagnosis based on medical images processing and interpetating.

Content

1. API

1.1. Patients
1.2. Studies
1.3. Series
1.4. Instances
1.5. Plugins

2. Plugins

🔴 1. API

📗 1.1. Patients

Base URL: /api

Resource Description
GET /patients Find all patients
GET /patients/:id Find patient by id
GET /patients/:id/studies Find studies for patient
PUT /patients/:id Update patient
DELETE /patients/:id Delete patient

GET /patients

Description: Find all patients

GET /patients/:id

Description: Find patient by id

GET /patients/:id/studies

Description: Find patient's studies

PUT /patients/:id

Description: Update patient

DELETE /patients/:id

Description: Delete patient

📗 1.3 Studies

Base URL: /api

Resource Description
GET /studies Find all patients
GET /studies/:id Find patient by id
GET /studies/:id/series Find studies for patient
PUT /studies/:id Update study
DELETE /studies/:id Delete study

GET /studies

Description: Find all studies

GET /studies/:id

Description: Find study by id

GET /studies/:id/series

Description: Find study's series

PUT /studies/:id

Description: Update study

DELETE /studies/:id

Description: Delete study

📗 1.3 Series

Base URL: /api

Resource Description
GET /series Find all series
GET /series/:id Find series by id
GET /series/:id/instances Find series' instances
PUT /series/:id Update series
DELETE /series/:id Delete series

GET /series

Description: Find all series

GET /series/:id

Description: Find series by id

GET /series/:id/instances

Description: Find series' instances

PUT /series/:id

Description: Update series

DELETE /series/:id

Description: Delete series

📗 1.4 Instances

Base URL: /api

Resource Description
GET /instances Find all instance
GET /instances/:id Find instance by id
GET /instances/:id/tags Get instance's tags
GET /instances/:id/image Get instance's image
GET /instances/:id/raw Get instance's raw pixel data in bytes
GET /instances/:instance_id/process/by_plugin/:plugin_id Process instance by plugin
PUT /instances/:id Update instance
DELETE /instances/:id Delete instance

GET /instances

Description: Find all instances

GET /instances/:id

Description: Find instances by id

GET /instances/:id/tags

Description: Get instance's tags

GET /instances/:id/image

Description: Get instance's image

GET /instances/:id/raw

Description: Get instance's raw pixel data in bytes

GET /instances/:instance_id/process/by_plugin/:plugin_id

Description: Process instance by plugin

POST /instances

Description: Save instance

PUT /instances/:id

Description: Update instance

DELETE /instances/:id

Description: Delete instance

📗 1.5 Plugins

Base URL: /api

Resource Description
GET /plugins Find all plugins
GET /plugins/:id Find plugin by id
POST /plugins Upload plugin
DELETE /plugins/:id Delete plugin

GET /plugins

Description: Find all plugins

GET /plugins/:id

Description: Find plugin by id

POST /plugins

Description: Upload plugin

DELETE /plugins/:id

Description: Delete plugin

🔴 2. Plugins

Neurdicom provides API for creating plugins to extend the functionality of DICOM files processing. Plugins should be written in Python and packed as ZIP archive. Plugin should have at least two files 'META.json' and 'plugin.py'. 'META.json' describes the plugin, author and main plugin information. Expected strusture of 'META.json' is shown below:

{
	"plugin_guid": "...",
	"author": "John Doe",
	"name": "hello",
	"info": "Print hello greeting",
	"help": "To greet say 'Hello'",
	"params": {
		"name": {
			"type": "text"
		}
	}
}

Field "params" list all parameters which plugin expects. Each "params" field has one of several options "type", "isarray", "values", "isnull". Field "type" is obligatory and takes one of the following values:

[
	"text",
	"int",
	"double"
]

Fields "isarray", "isnull" are boolearn or nullable. Nullable value are is considered as false.
Plugin should have a public "Plugin" class. "Plugin" class should have at least three of the following methods "init", "process" and "destory". Example of "Plugin" class is shown below:

class Plugin:
    def init(self):
        print('Init method called')

    def process(self, ds: Dataset = None, *args, **kwargs):
        print('Hello,', kwargs['name'], '!')
        return {
            'greeting': 'Hello, %s!' % kwargs['name']
        }

    def destroy(self):
        print('Destroy method called')

Also you can write plugins in C/C++. All C/C++ plugins should be createad as a shared library and compiled at the specific target. Library should contain exposed extern C-functions to provide an access to plugin class. For example:

Our library contains 4 files: library.h, library.cpp, plugin.h, plugin.cpp library.h and library.cpp contain defintions of C-functions which provide access to plugin initialization, processing and destruction:

library.h

#include "Plugin.h"

extern "C" Plugin* InitPlugin();
extern "C" double* Process(Plugin *plugin, double *img, int width, int height, const char* params);
extern "C" void DestroyPlugin(Plugin* plugin);

library.cpp

#include "library.h"
extern "C" {

    Plugin* InitPlugin(){
        return new Plugin;
    }

    double* Process(Plugin *plugin, double *img, int width, int height, const char* params) {
        return plugin->process(img, width, height, params);
    }

    void DestroyPlugin(Plugin *plugin){
        delete plugin;
    }
}

Plugin class should contain constructor, processing function and destructor. Processing function should accept at least 4 parameters: image as double array, width, height and additional parameters passed as json string.

plugin.h

class Plugin {
public:
    Plugin();
    double *process(double *, int, int, const char *params);
    ~Plugin();
};

plugin.cpp

#include "Plugin.h"
#include "json.hpp"
#include <iostream>

#include "json.hpp"

// for convenience
using json = nlohmann::json;

using namespace std;

double *Plugin::process(double *img, int w, int h, const char *params) {
    cout << "Processing image" << endl;
    cout << params << endl;
    auto j = json::parse(params);
    double factor = j["factor"].get<double>();
    for (int r = 0; r < w * h; r++) {
        img[r] = factor - img[r];
    }
    return img;
}

Plugin::Plugin() {
    cout << "Initializing plugin" << endl;
}

Plugin::~Plugin() {
    cout << "Destroying plugin" << endl;
}

References

  1. http://bikulov.org/blog/2013/10/01/using-cuda-c-plus-plus-functions-in-python-via-star-dot-so-and-ctypes/
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].