示例#1
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkImageLogarithmicScale(), 'Processing.',
         ('vtkImageData',), ('vtkImageData',),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
示例#2
0
    def fft(self, mode='magnitude', logscale=12, center=True):
        """Fast Fourier transform of a picture.

        :param float logscale: if non-zero, take the logarithm of the
            intensity and scale it by this factor.

        :param str mode: either [magnitude, real, imaginary, complex], compute the
            point array data accordingly.
        :param bool center: shift constant zero-frequency to the center of the image for display.
            (FFT converts spatial images into frequency space, but puts the zero frequency at the origin)
        """
        ffti = vtk.vtkImageFFT()
        ffti.SetInputData(self._data)
        ffti.Update()

        if 'mag' in mode:
            mag = vtk.vtkImageMagnitude()
            mag.SetInputData(ffti.GetOutput())
            mag.Update()
            out = mag.GetOutput()
        elif 'real' in mode:
            extractRealFilter = vtk.vtkImageExtractComponents()
            extractRealFilter.SetInputData(ffti.GetOutput())
            extractRealFilter.SetComponents(0)
            extractRealFilter.Update()
            out = extractRealFilter.GetOutput()
        elif 'imaginary' in mode:
            extractImgFilter = vtk.vtkImageExtractComponents()
            extractImgFilter.SetInputData(ffti.GetOutput())
            extractImgFilter.SetComponents(1)
            extractImgFilter.Update()
            out = extractImgFilter.GetOutput()
        elif 'complex' in mode:
            out = ffti.GetOutput()
        else:
            colors.printc("Error in fft(): unknown mode", mode)
            raise RuntimeError()

        if center:
            center = vtk.vtkImageFourierCenter()
            center.SetInputData(out)
            center.Update()
            out = center.GetOutput()

        if 'complex' not in mode:
            if logscale:
                ils = vtk.vtkImageLogarithmicScale()
                ils.SetInputData(out)
                ils.SetConstant(logscale)
                ils.Update()
                out = ils.GetOutput()

        return Picture(out)
示例#3
0
def main():
    # Initialize argument and constant variables
    parser = ArgumentParser("Create isosurfacing of object")
    parser.add_argument("infections")
    parser.add_argument("recovered")
    parser.add_argument("deaths")
    parser.add_argument("density")
    parser.add_argument("climate_max")
    parser.add_argument("climate_min")
    parser.add_argument("location")
    parser.add_argument("migration")
    parser.add_argument("sat")
    parser.add_argument("--camera",
                        type=str,
                        help="Optional camera settings file")

    args = parser.parse_args()

    global sat_x
    global sat_y
    global max_cases
    global max_radius

    global infections_color
    global recovered_color
    global deaths_color

    global infections_opacity
    global recovered_opacity
    global deaths_opacity

    global infections_data
    global recovered_data
    global deaths_data

    global legend_circle_actors
    global legend_text_actors

    global max_weight

    global ren

    app = QApplication([])
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)

    # Read in data for global confirmed cases
    with open(args.infections) as csvDataFile:
        csv_reader = csv.reader(csvDataFile)
        for row in csv_reader:
            # We do not need country/province name, so we remove the first two columns
            if (row[2] != 0 or row[3] != 0):
                infections_data.append(row[2:])
    infections_data = infections_data[1:]

    # Read in data for global deaths
    with open(args.deaths) as csvDataFile:
        csv_reader = csv.reader(csvDataFile)
        for row in csv_reader:
            if (row[2] != 0 or row[3] != 0):
                deaths_data.append(row[2:])
    deaths_data = deaths_data[1:]

    # Read in data for global recovered cases
    with open(args.recovered) as csvDataFile:
        csv_reader = csv.reader(csvDataFile)
        for row in csv_reader:
            if (row[2] != 0 or row[3] != 0):
                recovered_data.append(row[2:])
    recovered_data = recovered_data[1:]

    numDates = len(infections_data[0]) - 3
    max_cases = compute_max(date)

    # Create reader for density file
    density_reader = vtk.vtkTIFFReader()
    density_reader.SetFileName(args.density)
    density_reader.Update()

    density_log = vtk.vtkImageLogarithmicScale()
    density_log.SetInputConnection(density_reader.GetOutputPort())
    density_log.SetConstant(0.435)
    density_log.Update()
    density_range = density_log.GetOutput().GetScalarRange()

    climate_max_reader = vtk.vtkTIFFReader()
    climate_max_reader.SetFileName(args.climate_max + "-" +
                                   str(initial_date.month.real).zfill(2) +
                                   ".tif")
    climate_max_reader.Update()
    climate_max_range = [-40, 45]

    climate_min_reader = vtk.vtkTIFFReader()
    climate_min_reader.SetFileName(args.climate_min + "-" +
                                   str(initial_date.month.real).zfill(2) +
                                   ".tif")
    climate_min_reader.Update()
    climate_min_range = [-50, 30]

    sat_reader = vtk.vtkJPEGReader()
    sat_reader.SetFileName(args.sat)
    sat_reader.Update()
    sat_dimensions = sat_reader.GetOutput().GetDimensions()
    sat_x = sat_dimensions[0]
    sat_y = sat_dimensions[1]

    # Read in data for migration
    location_map = create_long_lat(args.location)
    migrations = []
    for filename in os.listdir(args.migration):
        if filename.endswith(".csv"):
            with open(args.migration + "\\" + filename) as csvDataFile:
                country = filename.split(".")[0]
                if country not in location_map:
                    continue
                loc_dst = location_map[country]
                csv_reader = csv.reader(csvDataFile)
                for row in csv_reader:
                    if row[2] not in location_map:
                        continue
                    loc_src = location_map[row[2]]
                    try:
                        migrations.append(
                            add_migration_info(loc_src, loc_dst, int(row[9])))
                    except ValueError:
                        continue

    line_actors = process_migration_actors(migrations)

    # Create a plane to map the satellite image onto
    plane = vtk.vtkPlaneSource()
    plane.SetCenter(0.0, 0.0, 0.0)
    plane.SetNormal(0.0, 0.0, 1.0)
    plane.SetPoint1(sat_x, 0, 0)
    plane.SetPoint2(0, sat_y, 0)

    # Create satellite image texture
    texture = vtk.vtkTexture()
    texture.SetInputConnection(sat_reader.GetOutputPort())

    # Map satellite texture to plane
    texturePlane = vtk.vtkTextureMapToPlane()
    texturePlane.SetInputConnection(plane.GetOutputPort())

    max_val = 100
    color_count = 1000

    density_ctf = vtk.vtkColorTransferFunction()
    density_ctf.AddRGBPoint(0, 0, 0, 0)
    density_ctf.AddRGBPoint(10, 0, 0, 1)
    density_ctf.AddRGBPoint(30, 0, 1, 1)
    density_ctf.AddRGBPoint(50, 1, 1, 0)
    density_ctf.AddRGBPoint(65, 1, 0.5, 0)
    density_ctf.AddRGBPoint(80, 1, 0, 0)

    density_lut = vtk.vtkLookupTable()
    density_lut.SetNumberOfTableValues(color_count)
    density_lut.Build()

    rgb = list(density_ctf.GetColor(0)) + [0]
    density_lut.SetTableValue(0, rgb)
    for i in range(1, color_count):
        rgb = list(density_ctf.GetColor(
            max_val * float(i) / color_count)) + [1]
        density_lut.SetTableValue(i, rgb)

    climate_ctf = vtk.vtkColorTransferFunction()
    climate_ctf.AddRGBPoint(5, 0, 0, 1)
    climate_ctf.AddRGBPoint(35, 0, 1, 1)
    climate_ctf.AddRGBPoint(65, 1, 1, 0)
    climate_ctf.AddRGBPoint(95, 1, 0, 0)

    climate_lut = vtk.vtkLookupTable()
    climate_lut.SetNumberOfTableValues(color_count)
    climate_lut.Build()

    for i in range(0, color_count):
        rgb = list(climate_ctf.GetColor(
            max_val * float(i) / color_count)) + [1]
        climate_lut.SetTableValue(i, rgb)

    # Create mappers
    density_mapper = vtk.vtkDataSetMapper()
    density_mapper.SetInputConnection(density_log.GetOutputPort())
    density_mapper.SetLookupTable(density_lut)
    density_mapper.SetScalarRange([0, density_range[1]])
    density_mapper.Update()

    climate_max_mapper = vtk.vtkDataSetMapper()
    climate_max_mapper.SetInputConnection(climate_max_reader.GetOutputPort())
    climate_max_mapper.SetLookupTable(climate_lut)
    climate_max_mapper.SetScalarRange(climate_max_range)
    climate_max_mapper.Update()

    climate_min_mapper = vtk.vtkDataSetMapper()
    climate_min_mapper.SetInputConnection(climate_min_reader.GetOutputPort())
    climate_min_mapper.SetLookupTable(climate_lut)
    climate_min_mapper.SetScalarRange(climate_min_range)
    climate_min_mapper.Update()

    sat_mapper = vtk.vtkPolyDataMapper()
    sat_mapper.SetInputConnection(texturePlane.GetOutputPort())

    density_actor = vtk.vtkActor()
    density_actor.SetMapper(density_mapper)
    density_actor.GetProperty().SetOpacity(0.99)
    density_actor.VisibilityOn()

    climate_max_actor = vtk.vtkActor()
    climate_max_actor.SetMapper(climate_max_mapper)
    climate_max_actor.GetProperty().SetOpacity(0.6)
    climate_max_actor.VisibilityOff()

    climate_min_actor = vtk.vtkActor()
    climate_min_actor.SetMapper(climate_min_mapper)
    climate_min_actor.GetProperty().SetOpacity(0.6)
    climate_min_actor.VisibilityOff()

    sat_actor = vtk.vtkActor()
    sat_actor.SetMapper(sat_mapper)
    sat_actor.SetTexture(texture)
    sat_actor.GetProperty().SetOpacity(0.6)

    # Make satellite image same size as contour map
    crange = sat_actor.GetXRange()[0] - sat_actor.GetXRange()[1]
    mrange = density_actor.GetXRange()[0] - density_actor.GetXRange()[1]
    density_actor.SetScale(crange / mrange)

    crange = sat_actor.GetXRange()[0] - sat_actor.GetXRange()[1]
    mrange = climate_max_actor.GetXRange()[0] - climate_max_actor.GetXRange(
    )[1]
    climate_max_actor.SetScale(crange / mrange)
    climate_min_actor.SetScale(crange / mrange)

    # Initialize renderer and place actors
    ren = vtk.vtkRenderer()

    ren.AddActor(density_actor)
    ren.AddActor(climate_max_actor)
    ren.AddActor(climate_min_actor)

    # Add legend actors
    add_legend_actors()

    # Add infections, recovered, and deaths actors
    infections_actors = []
    if (ui.infections_check.isChecked()):
        add_case_actors(date, infections_data, infections_actors,
                        infections_color, infections_opacity)

    recovered_actors = []
    if (ui.recovered_check.isChecked()):
        add_case_actors(date, recovered_data, recovered_actors,
                        recovered_color, recovered_opacity)

    deaths_actors = []
    if (ui.deaths_check.isChecked()):
        add_case_actors(date, deaths_data, deaths_actors, deaths_color,
                        deaths_opacity)

    for line_actor in line_actors:
        line_actor.VisibilityOn()
        ren.AddActor(line_actor)

    ren.AddActor(sat_actor)
    ren.ResetCamera()
    ren.SetBackground(0, 0, 0)

    # Initialize camera settings
    cam1 = ren.GetActiveCamera()
    cam1.Azimuth(0)
    cam1.Elevation(0)
    cam1.Roll(360)
    cam1.Zoom(1.5)

    ren.ResetCameraClippingRange()

    if args.camera:
        reader = open(args.camera, "r")
        line = reader.readline().split(",")
        cam1.SetPosition(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetFocalPoint(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetViewUp(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetClippingRange(float(line[0]), float(line[1]))
        line = reader.readline().split(",")
        cam1.SetViewAngle(float(line[0]))
        line = reader.readline().split(",")
        cam1.SetParallelScale(float(line[0]))

    # Initialize PyQT5 UI and link to renderer
    ui.vtkWidget.GetRenderWindow().AddRenderer(ren)
    ui.vtkWidget.GetRenderWindow().SetSize(1280, 720)

    ui.vtkWidget.GetRenderWindow().AddRenderer(ren)
    ui.vtkWidget.GetRenderWindow().SetAlphaBitPlanes(True)
    ui.vtkWidget.GetRenderWindow().SetMultiSamples(False)
    iren = ui.vtkWidget.GetRenderWindow().GetInteractor()

    # create the scalar_bar
    density_scalar_bar = vtk.vtkScalarBarActor()
    density_scalar_bar.SetOrientationToHorizontal()
    density_scalar_bar.SetMaximumNumberOfColors(color_count)
    density_scalar_bar.SetLookupTable(density_lut)
    density_scalar_bar.SetTitle("Density (Log 10)")

    # create the scalar_bar_widget
    density_scalar_bar_widget = vtk.vtkScalarBarWidget()
    density_scalar_bar_widget.SetInteractor(iren)
    density_scalar_bar_widget.SetScalarBarActor(density_scalar_bar)
    density_scalar_bar_widget.On()

    # create the scalar_bar
    climate_scalar_bar = vtk.vtkScalarBarActor()
    climate_scalar_bar.SetOrientationToHorizontal()
    climate_scalar_bar.SetMaximumNumberOfColors(color_count)
    climate_scalar_bar.SetLookupTable(climate_lut)
    climate_scalar_bar.SetTitle("Temparature (Celsius)")

    # create the scalar_bar_widget
    climate_scalar_bar_widget = vtk.vtkScalarBarWidget()
    climate_scalar_bar_widget.SetInteractor(iren)
    climate_scalar_bar_widget.SetScalarBarActor(climate_scalar_bar)
    climate_scalar_bar_widget.Off()

    # Function to initialize slider settings
    def slider_setup(slider, val, bounds, interv):
        slider.setOrientation(QtCore.Qt.Horizontal)
        slider.setValue(float(val))
        slider.setSliderPosition(val)
        slider.setTracking(False)
        slider.setTickInterval(interv)
        slider.setTickPosition(QSlider.TicksAbove)
        slider.setRange(bounds[0], bounds[1])

    slider_setup(ui.time_slider, 0, [0, numDates], 1)

    window.show()
    window.setWindowState(Qt.WindowMaximized)
    iren.Initialize()

    def time_slider_callback(val):
        global max_cases
        global date
        date = val
        new_date = initial_date + timedelta(val)
        if new_date.month.real != ui.curr_month:
            ui.curr_month = new_date.month.real
            climate_max_reader.SetFileName(args.climate_max + "-" +
                                           str(ui.curr_month).zfill(2) +
                                           ".tif")
            climate_max_reader.Update()
            climate_min_reader.SetFileName(args.climate_min + "-" +
                                           str(ui.curr_month).zfill(2) +
                                           ".tif")
            climate_min_reader.Update()
        ui.date_label.setText("Date (" + new_date.strftime('%m/%d/%Y') + "):")

        # Remove old infections, recovered, and deaths actors
        remove_case_actors(infections_actors)
        remove_case_actors(recovered_actors)
        remove_case_actors(deaths_actors)
        remove_legend_actors()

        # Recompute max cases
        max_cases = compute_max(date)

        # Add infections, recovered, and deaths actors
        if (ui.infections_check.isChecked()):
            add_case_actors(date, infections_data, infections_actors,
                            infections_color, infections_opacity)
        if (ui.recovered_check.isChecked()):
            add_case_actors(date, recovered_data, recovered_actors,
                            recovered_color, recovered_opacity)
        if (ui.deaths_check.isChecked()):
            add_case_actors(date, deaths_data, deaths_actors, deaths_color,
                            deaths_opacity)
        add_legend_actors()

        ui.vtkWidget.GetRenderWindow().Render()

    def infections_callback():
        if (ui.infections_check.isChecked()):
            add_case_actors(date, infections_data, infections_actors,
                            infections_color, infections_opacity)
        else:
            remove_case_actors(infections_actors)

        ui.vtkWidget.GetRenderWindow().Render()

    def recovered_callback():
        if (ui.recovered_check.isChecked()):
            add_case_actors(date, recovered_data, recovered_actors,
                            recovered_color, recovered_opacity)
        else:
            remove_case_actors(recovered_actors)

        ui.vtkWidget.GetRenderWindow().Render()

    def deaths_callback():
        if (ui.deaths_check.isChecked()):
            add_case_actors(date, deaths_data, deaths_actors, deaths_color,
                            deaths_opacity)
        else:
            remove_case_actors(deaths_actors)

        ui.vtkWidget.GetRenderWindow().Render()

    def density_callback():
        if ui.density_check.isChecked():
            ui.climate_max_check.setChecked(False)
            ui.climate_min_check.setChecked(False)
            density_actor.VisibilityOn()
            density_scalar_bar_widget.On()
            ui.vtkWidget.GetRenderWindow().Render()
        else:
            density_actor.VisibilityOff()
            density_scalar_bar_widget.Off()
            ui.vtkWidget.GetRenderWindow().Render()

    def climate_max_callback():
        if ui.climate_max_check.isChecked():
            ui.density_check.setChecked(False)
            ui.climate_min_check.setChecked(False)
            climate_max_actor.VisibilityOn()
            climate_scalar_bar_widget.On()
            ui.vtkWidget.GetRenderWindow().Render()
        else:
            climate_max_actor.VisibilityOff()
            climate_scalar_bar_widget.Off()
            ui.vtkWidget.GetRenderWindow().Render()

    def climate_min_callback():
        if ui.climate_min_check.isChecked():
            ui.density_check.setChecked(False)
            ui.climate_max_check.setChecked(False)
            climate_min_actor.VisibilityOn()
            climate_scalar_bar_widget.On()
            ui.vtkWidget.GetRenderWindow().Render()
        else:
            climate_min_actor.VisibilityOff()
            climate_scalar_bar_widget.Off()
            ui.vtkWidget.GetRenderWindow().Render()

    def migration_callback():
        if ui.migration_check.isChecked():
            for line_actor in line_actors:
                line_actor.VisibilityOn()
            ui.vtkWidget.GetRenderWindow().Render()
        else:
            for line_actor in line_actors:
                line_actor.VisibilityOff()
            ui.vtkWidget.GetRenderWindow().Render()

    # Handle screenshot button event
    def screenshot_callback():
        save_frame(ren.GetActiveCamera(), ui.vtkWidget.GetRenderWindow(),
                   ui.log)

    # Handle show camera settings button event
    def camera_callback():
        print_camera_settings(ren.GetActiveCamera(), ui.camera_info, ui.log)

    # Handle quit button event
    def quit_callback():
        sys.exit()

    # Register callbacks to UI
    ui.time_slider.valueChanged.connect(time_slider_callback)
    ui.push_screenshot.clicked.connect(screenshot_callback)
    ui.push_camera.clicked.connect(camera_callback)
    ui.push_quit.clicked.connect(quit_callback)

    ui.infections_check.stateChanged.connect(infections_callback)
    ui.recovered_check.stateChanged.connect(recovered_callback)
    ui.deaths_check.stateChanged.connect(deaths_callback)
    ui.density_check.stateChanged.connect(density_callback)
    ui.climate_max_check.stateChanged.connect(climate_max_callback)
    ui.climate_min_check.stateChanged.connect(climate_min_callback)
    ui.migration_check.stateChanged.connect(migration_callback)

    # Terminate setup for PyQT5 interface
    sys.exit(app.exec_())
示例#4
0
#!/usr/bin/env python
import vtk
from vtk.test import Testing
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

# This scripts shows a compressed spectrum of an image.
# Image pipeline
reader = vtk.vtkPNGReader()
reader.SetFileName("" + str(VTK_DATA_ROOT) + "/Data/fullhead15.png")
fft = vtk.vtkImageFFT()
fft.SetInputConnection(reader.GetOutputPort())
fft.ReleaseDataFlagOff()
#fft DebugOn
magnitude = vtk.vtkImageMagnitude()
magnitude.SetInputConnection(fft.GetOutputPort())
magnitude.ReleaseDataFlagOff()
center = vtk.vtkImageFourierCenter()
center.SetInputConnection(magnitude.GetOutputPort())
compress = vtk.vtkImageLogarithmicScale()
compress.SetInputConnection(center.GetOutputPort())
compress.SetConstant(15)
viewer = vtk.vtkImageViewer2()
viewer.SetInputConnection(compress.GetOutputPort())
viewer.SetColorWindow(150)
viewer.SetColorLevel(170)
viewInt = vtk.vtkRenderWindowInteractor()
viewer.SetupInteractor(viewInt)
viewer.Render()
# --- end of script --
示例#5
0
def main():
    colors = vtk.vtkNamedColors()

    fileName = get_program_parameters()

    # Read the image.
    readerFactory = vtk.vtkImageReader2Factory()
    reader = readerFactory.CreateImageReader2(fileName)
    reader.SetFileName(fileName)
    reader.Update()

    fft = vtk.vtkImageFFT()
    fft.SetInputConnection(reader.GetOutputPort())

    mag = vtk.vtkImageMagnitude()
    mag.SetInputConnection(fft.GetOutputPort())

    center = vtk.vtkImageFourierCenter()
    center.SetInputConnection(mag.GetOutputPort())

    compress = vtk.vtkImageLogarithmicScale()
    compress.SetInputConnection(center.GetOutputPort())
    compress.SetConstant(15)
    compress.Update()

    # Create the actors.
    originalActor = vtk.vtkImageActor()
    originalActor.GetMapper().SetInputConnection(reader.GetOutputPort())
    originalActor.GetProperty().SetInterpolationTypeToNearest()

    compressedActor = vtk.vtkImageActor()
    compressedActor.GetMapper().SetInputConnection(compress.GetOutputPort())
    compressedActor.GetProperty().SetInterpolationTypeToNearest()
    CreateImageActor(compressedActor, 160, 120)

    # Define the viewport ranges.
    # (xmin, ymin, xmax, ymax)
    originalViewport = [0.0, 0.0, 0.5, 1.0]
    compressedViewport = [0.5, 0.0, 1.0, 1.0]

    # Setup the renderers.
    originalRenderer = vtk.vtkRenderer()
    originalRenderer.SetViewport(originalViewport)
    originalRenderer.AddActor(originalActor)
    originalRenderer.ResetCamera()
    originalRenderer.SetBackground(colors.GetColor3d("SlateGray"))

    compressedRenderer = vtk.vtkRenderer()
    compressedRenderer.SetViewport(compressedViewport)
    compressedRenderer.AddActor(compressedActor)
    compressedRenderer.ResetCamera()
    compressedRenderer.SetBackground(colors.GetColor3d("LightSlateGray"))

    renderWindow = vtk.vtkRenderWindow()
    renderWindow.SetSize(600, 300)
    renderWindow.SetWindowName('VTKSpectrum')
    renderWindow.AddRenderer(originalRenderer)
    renderWindow.AddRenderer(compressedRenderer)

    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    style = vtk.vtkInteractorStyleImage()

    renderWindowInteractor.SetInteractorStyle(style)

    renderWindowInteractor.SetRenderWindow(renderWindow)
    renderWindowInteractor.Initialize()

    renderWindowInteractor.Start()
def scatterPlot(imagedata1, imagedata2, z, countVoxels=True, wholeVolume=True, logarithmic=True, bitDepth=8):
    """
	Create scatterplot
	"""
    imagedata1.SetUpdateExtent(imagedata1.GetWholeExtent())
    imagedata2.SetUpdateExtent(imagedata1.GetWholeExtent())

    imagedata1.Update()
    imagedata2.Update()
    range1 = imagedata1.GetScalarRange()
    range2 = imagedata2.GetScalarRange()

    n = 255
    # n = min(max(sc1max,sc2max),255)
    # d = (n+1) / float(2**bitDepth)
    if bitDepth is None:
        spacing1 = float(abs(range1[1] - range1[0])) / (n + 1)
        spacing2 = float(abs(range2[1] - range2[0])) / (n + 1)
    else:
        spacing1 = float(2 ** bitDepth) / (n + 1)
        spacing2 = float(2 ** bitDepth) / (n + 1)

    app = vtk.vtkImageAppendComponents()
    app.AddInput(imagedata1)
    app.AddInput(imagedata2)

    # shiftscale = vtk.vtkImageShiftScale()
    # shiftscale.SetOutputScalarTypeToUnsignedChar()
    # shiftscale.SetScale(d)
    # shiftscale.SetInputConnection(app.GetOutputPort())

    acc = vtk.vtkImageAccumulate()
    acc.SetComponentExtent(0, n, 0, n, 0, 0)
    acc.SetComponentOrigin(range1[0], range2[0], 0)
    acc.SetComponentSpacing(spacing1, spacing2, 0)
    # acc.SetInputConnection(shiftscale.GetOutputPort())
    acc.SetInputConnection(app.GetOutputPort())
    acc.Update()

    data = acc.GetOutput()
    origData = data

    originalRange = data.GetScalarRange()

    if logarithmic:
        Logging.info("Scaling scatterplot logarithmically", kw="imageop")
        logscale = vtk.vtkImageLogarithmicScale()
        logscale.SetInputConnection(acc.GetOutputPort())
        logscale.Update()
        data = logscale.GetOutput()

    x0, x1 = data.GetScalarRange()
    if countVoxels:
        Logging.info("Scalar range of scatterplot = ", x0, x1, kw="imageop")
        ctf = fire(x0, x1)
        ctf = equalize(data, ctf, x1)
        maptocolor = vtk.vtkImageMapToColors()
        maptocolor.SetInputConnection(data.GetProducerPort())
        maptocolor.SetLookupTable(ctf)
        maptocolor.SetOutputFormatToRGB()
        maptocolor.Update()
        data = maptocolor.GetOutput()
        ctf.originalRange = originalRange

    Logging.info("Scatterplot has dimensions: ", data.GetDimensions(), data.GetExtent(), kw="imageop")
    data.SetWholeExtent(data.GetExtent())
    img = vtkImageDataToWxImage(data)
    # w, h = img.GetWidth(), img.GetHeight()
    # if w < 255 or h < 255:
    # 	dh = 255-h
    # 	img.Resize((255, 255),(0, 0), 0,0,0)
    return img, ctf, origData
示例#7
0
def scatterPlot(imagedata1,
                imagedata2,
                z,
                countVoxels=True,
                wholeVolume=True,
                logarithmic=True,
                bitDepth=8):
    """
	Create scatterplot
	"""
    imagedata1.SetUpdateExtent(imagedata1.GetWholeExtent())
    imagedata2.SetUpdateExtent(imagedata1.GetWholeExtent())

    imagedata1.Update()
    imagedata2.Update()
    range1 = imagedata1.GetScalarRange()
    range2 = imagedata2.GetScalarRange()

    n = 255
    #n = min(max(sc1max,sc2max),255)
    #d = (n+1) / float(2**bitDepth)
    if bitDepth is None:
        spacing1 = float(abs(range1[1] - range1[0])) / (n + 1)
        spacing2 = float(abs(range2[1] - range2[0])) / (n + 1)
    else:
        spacing1 = float(2**bitDepth) / (n + 1)
        spacing2 = float(2**bitDepth) / (n + 1)

    app = vtk.vtkImageAppendComponents()
    app.AddInput(imagedata1)
    app.AddInput(imagedata2)

    #shiftscale = vtk.vtkImageShiftScale()
    #shiftscale.SetOutputScalarTypeToUnsignedChar()
    #shiftscale.SetScale(d)
    #shiftscale.SetInputConnection(app.GetOutputPort())

    acc = vtk.vtkImageAccumulate()
    acc.SetComponentExtent(0, n, 0, n, 0, 0)
    acc.SetComponentOrigin(range1[0], range2[0], 0)
    acc.SetComponentSpacing(spacing1, spacing2, 0)
    #acc.SetInputConnection(shiftscale.GetOutputPort())
    acc.SetInputConnection(app.GetOutputPort())
    acc.Update()

    data = acc.GetOutput()
    origData = data

    originalRange = data.GetScalarRange()

    if logarithmic:
        Logging.info("Scaling scatterplot logarithmically", kw="imageop")
        logscale = vtk.vtkImageLogarithmicScale()
        logscale.SetInputConnection(acc.GetOutputPort())
        logscale.Update()
        data = logscale.GetOutput()

    x0, x1 = data.GetScalarRange()
    if countVoxels:
        Logging.info("Scalar range of scatterplot = ", x0, x1, kw="imageop")
        ctf = fire(x0, x1)
        ctf = equalize(data, ctf, x1)
        maptocolor = vtk.vtkImageMapToColors()
        maptocolor.SetInputConnection(data.GetProducerPort())
        maptocolor.SetLookupTable(ctf)
        maptocolor.SetOutputFormatToRGB()
        maptocolor.Update()
        data = maptocolor.GetOutput()
        ctf.originalRange = originalRange

    Logging.info("Scatterplot has dimensions: ",
                 data.GetDimensions(),
                 data.GetExtent(),
                 kw="imageop")
    data.SetWholeExtent(data.GetExtent())
    img = vtkImageDataToWxImage(data)
    #w, h = img.GetWidth(), img.GetHeight()
    #if w < 255 or h < 255:
    #	dh = 255-h
    #	img.Resize((255, 255),(0, 0), 0,0,0)
    return img, ctf, origData
示例#8
0
def main():
    # Initialize argument and constant variables
    parser = ArgumentParser("Create isosurfacing of object")
    parser.add_argument("density")
    parser.add_argument("climate")
    parser.add_argument("sat")
    parser.add_argument("--camera",
                        type=str,
                        help="Optional camera settings file")

    args = parser.parse_args()

    # Create reader for ct scan
    density_reader = vtk.vtkTIFFReader()
    density_reader.SetFileName(args.density)
    density_reader.Update()
    print(density_reader.GetOutput().GetScalarRange()[1])

    density_log = vtk.vtkImageLogarithmicScale()
    density_log.SetInputConnection(density_reader.GetOutputPort())
    density_log.SetConstant(0.435)
    density_log.Update()
    density_range = density_log.GetOutput().GetScalarRange()

    climate_reader = vtk.vtkTIFFReader()
    climate_reader.SetFileName(args.climate + "-" +
                               str(initial_date.month.real).zfill(2) + ".tif")
    climate_reader.Update()
    climate_range = climate_reader.GetOutput().GetScalarRange()

    sat_reader = vtk.vtkJPEGReader()
    sat_reader.SetFileName(args.sat)

    max_val = 100
    color_count = 1000

    density_ctf = vtk.vtkColorTransferFunction()
    density_ctf.AddRGBPoint(0, 0, 0, 0)
    density_ctf.AddRGBPoint(10, 0, 0, 1)
    density_ctf.AddRGBPoint(30, 0, 1, 1)
    density_ctf.AddRGBPoint(50, 1, 1, 0)
    density_ctf.AddRGBPoint(65, 1, 0.5, 0)
    density_ctf.AddRGBPoint(80, 1, 0, 0)

    density_lut = vtk.vtkLookupTable()
    density_lut.SetNumberOfTableValues(color_count)
    density_lut.Build()

    rgb = list(density_ctf.GetColor(0)) + [0]
    density_lut.SetTableValue(0, rgb)
    for i in range(1, color_count):
        rgb = list(density_ctf.GetColor(
            max_val * float(i) / color_count)) + [1]
        density_lut.SetTableValue(i, rgb)

    climate_ctf = vtk.vtkColorTransferFunction()
    climate_ctf.AddRGBPoint(5, 0, 0, 1)
    climate_ctf.AddRGBPoint(35, 0, 1, 1)
    climate_ctf.AddRGBPoint(65, 1, 1, 0)
    climate_ctf.AddRGBPoint(95, 1, 0, 0)

    climate_lut = vtk.vtkLookupTable()
    climate_lut.SetNumberOfTableValues(color_count)
    climate_lut.Build()

    for i in range(0, color_count):
        rgb = list(climate_ctf.GetColor(
            max_val * float(i) / color_count)) + [1]
        climate_lut.SetTableValue(i, rgb)

    density_mapper = vtk.vtkDataSetMapper()
    density_mapper.SetInputConnection(density_log.GetOutputPort())
    density_mapper.SetLookupTable(density_lut)
    density_mapper.SetScalarRange([0, density_range[1]])
    density_mapper.Update()

    climate_mapper = vtk.vtkDataSetMapper()
    climate_mapper.SetInputConnection(climate_reader.GetOutputPort())
    climate_mapper.SetLookupTable(climate_lut)
    climate_mapper.SetScalarRange(climate_range)
    climate_mapper.Update()

    sat_mapper = vtk.vtkDataSetMapper()
    sat_mapper.SetInputConnection(sat_reader.GetOutputPort())

    density_actor = vtk.vtkActor()
    density_actor.SetMapper(density_mapper)
    density_actor.GetProperty().SetOpacity(0.99)
    density_actor.VisibilityOn()

    climate_actor = vtk.vtkActor()
    climate_actor.SetMapper(climate_mapper)
    climate_actor.GetProperty().SetOpacity(0.6)
    climate_actor.VisibilityOff()

    sat_actor = vtk.vtkActor()
    sat_actor.SetMapper(sat_mapper)
    sat_actor.GetProperty().SetOpacity(0.7)

    # Make satellite image same size as contour map
    crange = sat_actor.GetXRange()[0] - sat_actor.GetXRange()[1]
    mrange = density_actor.GetXRange()[0] - density_actor.GetXRange()[1]
    density_actor.SetScale(crange / mrange)

    crange = sat_actor.GetXRange()[0] - sat_actor.GetXRange()[1]
    mrange = climate_actor.GetXRange()[0] - climate_actor.GetXRange()[1]
    climate_actor.SetScale(crange / mrange)

    # Initialize renderer and place actors
    ren = vtk.vtkRenderer()
    ren.AddActor(density_actor)
    ren.AddActor(climate_actor)
    ren.AddActor(sat_actor)
    ren.ResetCamera()
    ren.SetBackground(0, 0, 0)

    # Initialize camera settings
    cam1 = ren.GetActiveCamera()
    cam1.Azimuth(0)
    cam1.Elevation(0)
    cam1.Roll(360)
    cam1.Zoom(1)

    ren.ResetCameraClippingRange()

    if args.camera:
        reader = open(args.camera, "r")
        line = reader.readline().split(",")
        cam1.SetPosition(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetFocalPoint(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetViewUp(float(line[0]), float(line[1]), float(line[2]))
        line = reader.readline().split(",")
        cam1.SetClippingRange(float(line[0]), float(line[1]))
        line = reader.readline().split(",")
        cam1.SetViewAngle(float(line[0]))
        line = reader.readline().split(",")
        cam1.SetParallelScale(float(line[0]))

    # Initialize PyQT5 UI and link to renderer
    app = QApplication([])
    window = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(window)
    ui.vtkWidget.GetRenderWindow().AddRenderer(ren)
    ui.vtkWidget.GetRenderWindow().SetSize(1280, 720)

    ui.vtkWidget.GetRenderWindow().AddRenderer(ren)
    ui.vtkWidget.GetRenderWindow().SetAlphaBitPlanes(True)
    ui.vtkWidget.GetRenderWindow().SetMultiSamples(False)
    iren = ui.vtkWidget.GetRenderWindow().GetInteractor()

    # create the scalar_bar
    density_scalar_bar = vtk.vtkScalarBarActor()
    density_scalar_bar.SetOrientationToHorizontal()
    density_scalar_bar.SetMaximumNumberOfColors(color_count)
    density_scalar_bar.SetLookupTable(density_lut)
    density_scalar_bar.SetTitle("Density (Log 10)")

    # create the scalar_bar_widget
    density_scalar_bar_widget = vtk.vtkScalarBarWidget()
    density_scalar_bar_widget.SetInteractor(iren)
    density_scalar_bar_widget.SetScalarBarActor(density_scalar_bar)
    density_scalar_bar_widget.On()

    # create the scalar_bar
    climate_scalar_bar = vtk.vtkScalarBarActor()
    climate_scalar_bar.SetOrientationToHorizontal()
    climate_scalar_bar.SetMaximumNumberOfColors(color_count)
    climate_scalar_bar.SetLookupTable(climate_lut)
    climate_scalar_bar.SetTitle("Temparature (Celsius)")

    # create the scalar_bar_widget
    climate_scalar_bar_widget = vtk.vtkScalarBarWidget()
    climate_scalar_bar_widget.SetInteractor(iren)
    climate_scalar_bar_widget.SetScalarBarActor(climate_scalar_bar)
    climate_scalar_bar_widget.Off()

    # Function to initialize slider settings
    def slider_setup(slider, val, bounds, interv):
        slider.setOrientation(QtCore.Qt.Horizontal)
        slider.setValue(float(val))
        slider.setSliderPosition(val)
        slider.setTracking(False)
        slider.setTickInterval(interv)
        slider.setTickPosition(QSlider.TicksAbove)
        slider.setRange(bounds[0], bounds[1])

    slider_setup(ui.time_slider, 0, [0, (curr_date - initial_date).days], 1)

    window.show()
    window.setWindowState(Qt.WindowMaximized)
    iren.Initialize()

    def time_slider_callback(val):
        new_date = initial_date + timedelta(val)
        if new_date.month.real != ui.curr_month:
            ui.curr_month = new_date.month.real
            climate_reader.SetFileName(args.climate + "-" +
                                       str(ui.curr_month).zfill(2) + ".tif")
            climate_reader.Update()
            new_range = climate_reader.GetOutput().GetScalarRange()
            climate_mapper.SetScalarRange(new_range)
        ui.date_label.setText("Date (" + new_date.strftime('%m/%d/%Y') + "):")

    def density_callback():
        isOn = density_actor.GetVisibility()
        if isOn:
            density_actor.VisibilityOff()
            density_scalar_bar_widget.Off()
            ui.vtkWidget.GetRenderWindow().Render()
            ui.push_density.setText('Enable Density')
        else:
            density_actor.VisibilityOn()
            density_scalar_bar_widget.On()
            ui.vtkWidget.GetRenderWindow().Render()
            ui.push_density.setText('Disable Density')

    def climate_callback():
        isOn = climate_actor.GetVisibility()
        if isOn:
            climate_actor.VisibilityOff()
            climate_scalar_bar_widget.Off()
            ui.vtkWidget.GetRenderWindow().Render()
            ui.push_climate.setText('Enable Temperature')
        else:
            climate_actor.VisibilityOn()
            climate_scalar_bar_widget.On()
            ui.vtkWidget.GetRenderWindow().Render()
            ui.push_climate.setText('Disable Temperature')

    # Handle screenshot button event
    def screenshot_callback():
        save_frame(ren.GetActiveCamera(), ui.vtkWidget.GetRenderWindow(),
                   ui.log)

    # Handle show camera settings button event
    def camera_callback():
        print_camera_settings(ren.GetActiveCamera(), ui.camera_info, ui.log)

    # Handle quit button event
    def quit_callback():
        sys.exit()

    # Register callbacks to UI
    ui.time_slider.valueChanged.connect(time_slider_callback)
    ui.push_screenshot.clicked.connect(screenshot_callback)
    ui.push_camera.clicked.connect(camera_callback)
    ui.push_quit.clicked.connect(quit_callback)

    ui.push_density.clicked.connect(density_callback)
    ui.push_climate.clicked.connect(climate_callback)

    # Terminate setup for PyQT5 interface
    sys.exit(app.exec_())