Source code for pwspy.utility.plotting.roiColor

# Copyright 2018-2020 Nick Anthony, Backman Biophotonics Lab, Northwestern University
#
# This file is part of PWSpy.
#
# PWSpy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# PWSpy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with PWSpy.  If not, see <https://www.gnu.org/licenses/>.

from typing import List
import numpy as np
from pwspy.dataTypes import Roi, Acquisition
import matplotlib.pyplot as plt
import matplotlib


[docs]def roiColor(data: np.ndarray, rois: List[Roi], vmin, vmax, scale_bg, hue=0, exponent=1, numScaleBarPix=0): """ Given a 2D image of data this function will scale the data, apply an exponential curve, and color the ROI regions with Hue. Used in many presentations and publications. Args: data (np.ndarray): an MxN array of data to be imaged rois (List[Roi]): a list of Roi objects. the regions inside a roiFile will be colored. vmin (float): the minimum value in the data that will be set to black vmax (float): the maximum value in the data that will be set to white scale_bg (float): Scales the brightness of the background (non-roiFile) region. hue (float): A value of 0-1 indicating the hue of the colored regions. exponent (float): The exponent used to curve the color map for more pleasing results. numScaleBarPix (float): The length of the scale bar in number of pixels. Returns: np.ndarray: MxNx3 RGB array of the image""" mask = np.zeros(rois[0].mask.shape, dtype=np.bool) for roi in rois: mask = np.logical_or(mask, roi.mask) # scale and process rms cube (this is probably not the best way to do it) data = data - vmin data[data < 0] = 0 data[data > (vmax - vmin)] = vmax - vmin data = data ** exponent data = data * 1 / ((vmax - vmin) ** exponent) # normalize image so maximum value is 1 # make the nucs red and everything else gray scale hsv = np.ones((data.shape[0], data.shape[1], 3)) hsv[:,:,2] = data hsv[:,:,2][~mask] *= scale_bg hsv[:,:,0] = hue hsv[:,:,1][~mask] = 0 out = matplotlib.colors.hsv_to_rgb(hsv) if (numScaleBarPix > 0): out[round(out.shape[0]*.965):round(out.shape[0]*.975), round(out.shape[0]*.03):round(out.shape[0] * .03 + numScaleBarPix), :] = 1 return out
if __name__ == "__main__": acq = Acquisition(r'G:\Aya_NAstudy\matchedNAi_largeNAc\cells\Cell3') an = acq.pws.loadAnalysis('p0') rois = [acq.loadRoi(name, num).getRoi() for name, num, fformat in acq.getRois() if name == 'nucleus'] out = roiColor(an.rms, rois, 0.04, .3, 1, exponent=1.1, numScaleBarPix=100) fig, ax = plt.subplots() ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) ax.imshow(out)#, vmax=vmax, vmin=vmin) fig.show() a = 1