diff --git a/.appveyor.yml b/.appveyor.yml index 7b1f344c..40ab3eaa 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ build: false environment: matrix: - - PYTHON_VERSION: 3.6 + - PYTHON_VERSION: 3.7 MINICONDA: C:\Miniconda init: @@ -12,8 +12,11 @@ install: - "set PATH=%MINICONDA%;%MINICONDA%\\Scripts;%PATH%" - conda config --set always_yes yes --set changeps1 no - conda update -q conda - - "conda env create --force -f environment.yml python=3.6" + - conda config --add channels conda-forge + - conda info -a + - "conda env create -q -n segmentator python=%PYTHON_VERSION% --file requirements.txt" - activate segmentator + - pip install compoda - python setup.py install test_script: diff --git a/.coveragerc b/.coveragerc index 9d4b8830..a4324762 100644 --- a/.coveragerc +++ b/.coveragerc @@ -7,3 +7,5 @@ omit = *config* *tests/* segmentator/future/* + segmentator/cython/* + *ui.py diff --git a/README.md b/README.md index 0847886d..db778c03 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![DOI](https://zenodo.org/badge/59303623.svg)](https://zenodo.org/badge/latestdoi/59303623) [![Build Status](https://travis-ci.org/ofgulban/segmentator.svg?branch=master)](https://travis-ci.org/ofgulban/segmentator) [![Build status](https://ci.appveyor.com/api/projects/status/lkxp4y5ahssqv6ng?svg=true)](https://ci.appveyor.com/project/ofgulban/segmentator) [![codecov](https://codecov.io/gh/ofgulban/segmentator/branch/master/graph/badge.svg)](https://codecov.io/gh/ofgulban/segmentator) [![Code Health](https://landscape.io/github/ofgulban/segmentator/master/landscape.svg?style=flat)](https://landscape.io/github/ofgulban/segmentator/master) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/segmentator/Lobby) +[![DOI](https://zenodo.org/badge/59303623.svg)](https://zenodo.org/badge/latestdoi/59303623) [![Build Status](https://travis-ci.org/ofgulban/segmentator.svg?branch=master)](https://travis-ci.org/ofgulban/segmentator) [![Build status](https://ci.appveyor.com/api/projects/status/lkxp4y5ahssqv6ng?svg=true)](https://ci.appveyor.com/project/ofgulban/segmentator) [![codecov](https://codecov.io/gh/ofgulban/segmentator/branch/master/graph/badge.svg)](https://codecov.io/gh/ofgulban/segmentator) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/segmentator/Lobby) # Segmentator @@ -27,7 +27,6 @@ The goal is to provide a complementary tool to the already available brain tissu | [Compoda](https://github.com/ofgulban/compoda) | 0.3.3 | ## Installation & Quick Start -- Make sure you have [**pip**](https://en.wikipedia.org/wiki/Pip_(package_manager)) installed if you are using [**Python 2.7**](https://www.python.org/download/releases/2.7/). - Download [the latest release](https://github.com/ofgulban/segmentator/releases) and unzip it. - Change directory in your command line: ``` diff --git a/environment.yml b/environment.yml deleted file mode 100644 index 0d9c81d2..00000000 --- a/environment.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: segmentator -channels: -- conda-forge -dependencies: -- setuptools>=19.6* -- pytest>=3* -- pytest-cov>=2.5* -- numpy>=1.14* -- scipy>=1.0* -- matplotlib>=2.1* -- nibabel>=2.2* diff --git a/requirements.txt b/requirements.txt index 33039c12..0920861f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,3 @@ scipy==1.0.0 matplotlib==2.2.2 nibabel==2.2.1 pytest-cov==2.5.1 -compoda>=0.3 diff --git a/segmentator/config_filters.py b/segmentator/config_filters.py index 2bc3ab7c..764e2122 100644 --- a/segmentator/config_filters.py +++ b/segmentator/config_filters.py @@ -11,3 +11,4 @@ edge_thr = 0.001 gamma = 1 downsampling = 0 +no_nonpositive_mask = False diff --git a/segmentator/filter.py b/segmentator/filter.py index 0a96d6e6..6386074a 100644 --- a/segmentator/filter.py +++ b/segmentator/filter.py @@ -20,7 +20,7 @@ from __future__ import division import os import numpy as np -import config_filters as cfg +import segmentator.config_filters as cfg from nibabel import load, Nifti1Image, save from numpy.linalg import eigh from scipy.ndimage import gaussian_filter @@ -71,7 +71,11 @@ def QC_export(image, basename, identifier, nii): else: pass -idx_msk_flat = ima.flatten() != 0 +if cfg.no_nonpositive_mask: # TODO: work in progress + idx_msk_flat = np.ones(ima.size, dtype=bool) +else: # mask out non positive voxels + idx_msk_flat = ima.flatten() > 0 + dims = ima.shape # The main loop diff --git a/segmentator/filters_ui.py b/segmentator/filters_ui.py index 0f61de73..ef44cc19 100644 --- a/segmentator/filters_ui.py +++ b/segmentator/filters_ui.py @@ -73,6 +73,10 @@ def main(): help="(!WIP!) Downsampling factor, use integers > 1. E.g. factor of 2 \ reduces the amount of voxels 8 times." ) + parser.add_argument( + "--no_nonpositive_mask", action='store_true', + help="(!WIP!) Do not mask out non-positive values." + ) # set cfg file variables to be accessed from other scripts args = parser.parse_args() @@ -85,6 +89,7 @@ def main(): cfg.nr_iterations = args.nr_iterations cfg.save_every = args.save_every cfg.downsampling = args.downsampling + cfg.no_nonpositive_mask = args.no_nonpositive_mask welcome_str = 'Segmentator {}'.format(__version__) welcome_decor = '=' * len(welcome_str) diff --git a/segmentator/utils.py b/segmentator/utils.py index 8fee9bce..441f1f80 100755 --- a/segmentator/utils.py +++ b/segmentator/utils.py @@ -25,7 +25,6 @@ from nibabel import load, Nifti1Image, save from scipy.ndimage import convolve from time import time -from segmentator.deriche_prepare import Deriche_Gradient_Magnitude def sub2ind(array_shape, rows, cols): @@ -304,6 +303,7 @@ def compute_gradient_magnitude(ima, method='scharr'): gra = np.asarray(np.gradient(ima)) gra_mag = np.sqrt(np.sum(np.power(gra, 2.), axis=0)) elif method.lower() == 'deriche': + from segmentator.deriche_prepare import Deriche_Gradient_Magnitude alpha = cfg.deriche_alpha print(' Selected alpha: {}'.format(alpha)) ima = np.ascontiguousarray(ima, dtype=np.float32)