def attach(self, image_viewer): # add widgets self.add_widget(Slider('sigma', 0, 5)) self.add_widget(Slider('low threshold', 0, 255, value_type='int')) self.add_widget(Slider('high threshold', 0, 255, value_type='int')) super(CannyPlugin, self).attach(image_viewer)
def go(img): def preprocess(img): U = {} V = {} s = {} for i in (0, 1, 2): res = svd(img[..., i], full_matrices=False) U[i] = np.mat(res[0]) V[i] = np.mat(res[2]) s[i] = res[1] return U, V, s U, V, s = preprocess(img) def display(_, _from, _to): res = np.zeros_like(img) for i in (0, 1, 2): _s = s[i].copy() _s[:_from] = 0 _s[_to:] = 0 S = np.mat(np.diag(_s)) res[..., i] = U[i] * S * V[i] return res viewer = ImageViewer(img) plugin = Plugin(image_filter=display) plugin.name = "" plugin += Slider('_from', 0, len(s[0]), 0, 'int', update_on='move') plugin += Slider('_to', 0, len(s[0]), len(s[0]), 'int', update_on='move') viewer += plugin viewer.show()
def attach(self, image_viewer): ''' Override the attaching of the plugin to the ImageViewer. This utilizes nearly identical implementation to https://github.com/scikit-image/ scikit-image/blob/master/skimage/viewer/plugins/canny.py, but changes the limits for parameter selection. ''' image = image_viewer.image imin, imax = skimage.dtype_limits(image, clip_negative=False) itype = 'float' if np.issubdtype(image.dtype, np.floating) else 'int' self.add_widget(Slider('sigma', 0, 2, update_on='release')) self.add_widget( Slider('low_threshold', imin, imax, value_type=itype, update_on='release')) self.add_widget( Slider('high_threshold', imin, imax, value_type=itype, update_on='release')) self.add_widget(ComboBox('color', self.color_names, ptype='plugin')) # Call parent method at end b/c it calls `filter_image`, which needs # the values specified by the widgets. Alternatively, move call to # parent method to beginning and add a call to `self.filter_image()` super(CannyPlugin, self).attach(image_viewer)
def test_slider_int(): viewer = get_image_viewer() sld = Slider('radius', 2, 10, value_type='int') viewer.plugins[0] += sld assert_equal(sld.val, 4) sld.val = 6 assert_equal(sld.val, 6) sld.editbox.setText('5') sld._on_editbox_changed() assert_equal(sld.val, 5)
def test_slider_float(): viewer = get_image_viewer() sld = Slider('alpha', 2.1, 3.1, value=2.1, value_type='float', orientation='vertical', update_on='move') viewer.plugins[0] += sld assert_equal(sld.val, 2.1) sld.val = 2.5 assert_almost_equal(sld.val, 2.5, 2) sld.editbox.setText('0.1') sld._on_editbox_changed() assert_almost_equal(sld.val, 2.5, 2)
def __init__(self, search_pattern): bottom_px = 60 self.bottom_px = bottom_px plugin = Plugin(image_filter=self.image_filter, dock="right") self.setup_names = ['Bottom'] self.show_orig = CheckBox('show_orig', value=False, alignment='left') plugin += self.show_orig plugin += ComboBox('setup', self.setup_names) plugin += Slider('bottom_px', 0, 500, value=self.bottom_px, value_type='int') plugin += Button("Print", callback=self.on_print_click) fnames = [path for path in glob.iglob(search_pattern, recursive=True)] images, gray_images = read_images(fnames) self.viewer = CollectionViewer(images) self.viewer += plugin
def __init__(self, search_pattern): blur_kernel_size = 1 cal_fnames = [ path for path in glob.iglob('camera_cal/*.jpg', recursive=True) ] cal_images, cal_gray_images = read_images(cal_fnames) self.objpoints, self.imgpoints, _ = get_chessboard_corners( cal_images, cal_gray_images) self.blur_kernel_size = blur_kernel_size self.top_left_x = top_left_x self.top_left_y = top_left_y self.top_right_x = top_right_x self.top_right_y = top_right_y self.bottom_right_x = bottom_right_x self.bottom_right_y = bottom_right_y self.bottom_left_x = bottom_left_x self.bottom_left_y = bottom_left_y plugin = Plugin(image_filter=self.image_filter, dock="right") self.setup_names = [ 'ROI poly', "ROI Transformation", 'ROI Transformed', "Final Transformation poly", 'Final Transformation', 'Final Transformed' ] self.show_orig = CheckBox('show_orig', value=False, alignment='left') plugin += self.show_orig plugin += ComboBox('setup', self.setup_names) plugin += Slider('blur_kernel_size', 0, 31, value=self.blur_kernel_size, value_type='int') plugin += Slider('top_left_x', 0, 1, value=self.top_left_x) plugin += Slider('top_left_y', 0, 1, value=self.top_left_y) plugin += Slider('top_right_x', 0, 1, value=self.top_right_x) plugin += Slider('top_right_y', 0, 1, value=self.top_right_y) plugin += Slider('bottom_right_x', 0, 1, value=self.bottom_right_x) plugin += Slider('bottom_right_y', 0, 1, value=self.bottom_right_y) plugin += Slider('bottom_left_x', 0, 1, value=self.bottom_left_x) plugin += Slider('bottom_left_y', 0, 1, value=self.bottom_left_y) plugin += Button("Print", callback=self.on_print_click) fnames = [path for path in glob.iglob(search_pattern, recursive=True)] images, gray_images = read_images(fnames) self.viewer = CollectionViewer(images) self.viewer += plugin
def go(img): def preprocess(img): U = {} V = {} s = {} for i in (0, 1, 2): res = svd(img[...,i], full_matrices=False) U[i] = np.mat(res[0]) V[i] = np.mat(res[2]) s[i] = res[1] return U, V, s def display(_, R, G, B): rgb = (R, G, B) res = np.zeros_like(img) for i in (0, 1, 2): _s = s[i].copy() _s[:rgb[i]] = 0 S = np.mat(np.diag(_s)) res[...,i] = U[i]*S*V[i] return res def _display_all(RGB): if RGB in cache: return cache[RGB] cache[RGB] = display(None, RGB, RGB, RGB) return cache[RGB] if os.path.isfile(cache_fname): cache = pickle.load(open(cache_fname, "rb")) n = len(cache) - 1 img = _display_all(n) else: U, V, s = preprocess(img) n = len(s[0]) cache = {} for i in range(n + 1): print("caching", i) _display_all(i) with open(cache_fname, "wb") as fh: pickle.dump(cache, fh) print("wrote to:", cache_fname) def display_all(_, RGB): return _display_all(RGB) viewer = ImageViewer(img) plugin = Plugin(image_filter = display_all) plugin.name = "" plugin += Slider('RGB', 0, n, 0, 'int', update_on='move') viewer += plugin viewer.show()
def go(img): def preprocess(img): U = {} V = {} s = {} for i in (0, 1, 2): res = svd(img[..., i], full_matrices=False) U[i] = np.mat(res[0]) V[i] = np.mat(res[2]) s[i] = res[1] return U, V, s U, V, s = preprocess(img) def display(_, R, G, B): rgb = (R, G, B) res = np.zeros_like(img) for i in (0, 1, 2): _s = s[i].copy() _s[rgb[i]:] = 0 S = np.mat(np.diag(_s)) res[..., i] = U[i] * S * V[i] return res def display_all(_, RGB): return display(_, RGB, RGB, RGB) viewer = ImageViewer(img) plugin = Plugin(image_filter=display) plugin.name = "" plugin += Slider('R', 0, len(s[0]), len(s[0]), 'int') plugin += Slider('G', 0, len(s[0]), len(s[1]), 'int') plugin += Slider('B', 0, len(s[0]), len(s[2]), 'int') viewer += plugin plugin = Plugin(image_filter=display_all) plugin.name = "" plugin += Slider('RGB', 0, len(s[0]), len(s[0]), 'int') viewer += plugin viewer.show()
def __init__(self, image, **kwargs): super(RotatedImageViewer, self).__init__(image, **kwargs) slider_kwds = dict(value=0, low=0, high=5, update_on='release', callback=self.update_angle, value_type='float') self.slider = Slider('angle', **slider_kwds) self.layout.addWidget(self.slider) self.origin_image = image
def viewer(): image = skimage.data.coins() viewer = ImageViewer(image) viewer.show() viewer += LineProfile(viewer) overlay, data = viewer.show()[0] #-------------------- denoise_plugin = Plugin( image_filter=skimage.restoration.denoise_tv_bregman) denoise_plugin += Slider('weight', 0.01, 0.5, update_on='release') denoise_plugin += SaveButtons() viewer = ImageViewer(image) viewer += denoise_plugin denoised = viewer.show()[0][0]
def test_plugin(): img = skimage.img_as_float(data.moon()) viewer = ImageViewer(img) def median_filter(img, radius=3): return median(img, selem=disk(radius=radius)) plugin = Plugin(image_filter=median_filter) viewer += plugin plugin += Slider('radius', 1, 5) assert_almost_equal(np.std(viewer.image), 12.556, 3) plugin.filter_image() assert_almost_equal(np.std(viewer.image), 12.931, 3) plugin.show() plugin.close() plugin.clean_up() img, _ = plugin.output() assert_equal(img, viewer.image)
HH = 1. / H HH[np.abs(HH) > K] = K gg = np.abs(np.fft.ifft2(F * HH)) gg = gg[:M, :N] gg = np.clip(gg, 0, clip) gg -= gg.min() gg /= gg.max() return gg viewer = ImageViewer(image) plugin = Plugin(image_filter=apply_inverse_filter) plugin += Slider('T', 0, 1, value=0.5, value_type='float', update_on='release') plugin += Slider('a', -0.1, 0.1, value=0, value_type='float', update_on='release') plugin += Slider('b', -0.1, 0.1, value=0, value_type='float', update_on='release') plugin += Slider('K', 0, 100,
from skimage import data from skimage.filter import canny from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider from skimage.viewer.widgets.history import SaveButtons from skimage.viewer.plugins.overlayplugin import OverlayPlugin image = data.camera() # You can create a UI for a filter just by passing a filter function... plugin = OverlayPlugin(image_filter=canny) # ... and adding widgets to adjust parameter values. plugin += Slider('sigma', 0, 5) plugin += Slider('low threshold', 0, 255) plugin += Slider('high threshold', 0, 255) # ... and we can also add buttons to save the overlay: plugin += SaveButtons(name='Save overlay to:') # Finally, attach the plugin to an image viewer. viewer = ImageViewer(image) viewer += plugin canny_edges = viewer.show()[0][0]
from skimage import data from skimage.filter import canny from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider from skimage.viewer.widgets.history import SaveButtons from skimage.viewer.plugins.overlayplugin import OverlayPlugin image = data.camera() # You can create a UI for a filter just by passing a filter function... plugin = OverlayPlugin(image_filter=canny) # ... and adding widgets to adjust parameter values. plugin += Slider('sigma', 0, 5, update_on='release') plugin += Slider('low threshold', 0, 255, update_on='release') plugin += Slider('high threshold', 0, 255, update_on='release') # ... and we can also add buttons to save the overlay: plugin += SaveButtons(name='Save overlay to:') # Finally, attach the plugin to an image viewer. viewer = ImageViewer(image) viewer += plugin viewer.show()
================================== Demo of a CollectionViewer for viewing collections of images with the `autolevel` rank filter connected as a plugin. """ from skimage import data from skimage.filters import rank from skimage.morphology import disk from skimage.viewer import CollectionViewer from skimage.viewer.widgets import Slider from skimage.viewer.plugins.base import Plugin # Wrap autolevel function to make the disk size a filter argument. def autolevel(image, disk_size): return rank.autolevel(image, disk(disk_size)) img_collection = [data.camera(), data.coins(), data.text()] plugin = Plugin(image_filter=autolevel) plugin += Slider('disk_size', 2, 8, value_type='int') plugin.name = "Autolevel" viewer = CollectionViewer(img_collection) viewer += plugin viewer.show()
image = data.coins() viewer = ImageViewer(image) viewer.show() #%% from skimage.viewer.plugins.lineprofile import LineProfile viewer = ImageViewer(image) viewer += LineProfile(viewer) overlay, data = viewer.show()[0] #%% from skimage.viewer.widgets import Slider from skimage.viewer.widgets.history import SaveButtons denoise_plugin += Slider('weight', 0.01, 0.5, update_on='release') denoise_plugin += SaveButtons() #%%
from skimage import data from skimage.filter import canny from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider from skimage.viewer.plugins.overlayplugin import OverlayPlugin plugin = OverlayPlugin(image_filter=canny) plugin += Slider('sigma', 0, 5) plugin += Slider('low threshold', 0, 255, value_type='int') plugin += Slider('high threshold', 0, 255, value_type='int') viewer = ImageViewer(data.camera()) viewer += plugin viewer.show()
canny_kwargs = dict([(k, kwargs.pop(k)) for k in canny_keys]) hough_kwargs = kwargs edges = canny(image, **canny_kwargs) lines = probabilistic_hough(edges, **hough_kwargs) self._lines = lines return edges def display_filtered_image(self, edges): self.overlay = edges if hasattr(self, '_hough_lines'): self.image_viewer.ax.collections.remove(self._hough_lines) self._hough_lines = mcoll.LineCollection(self._lines, colors='r') self.image_viewer.ax.add_collection(self._hough_lines) self.image_viewer.redraw() image = data.text() # Note: ImageViewer must be called before Plugin b/c it starts the event loop. viewer = ImageViewer(image) # You can create a UI for a filter just by passing a filter function... plugin = HoughPlugin() plugin += Slider('sigma', 0, 5, value=1, update_on='release') plugin += Slider('low threshold', 0, 255, update_on='release') plugin += Slider('high threshold', 0, 255, update_on='release') plugin += Slider('threshold', 0, 255, update_on='release') plugin += Slider('line length', 0, 100, update_on='release') plugin += Slider('line gap', 0, 20, update_on='release') # Finally, attach the plugin to the image viewer. viewer += plugin viewer.show()
from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider from skimage.viewer.plugins.overlayplugin import OverlayPlugin from skimage import data, filter image = data.coins() viewer = ImageViewer(image) plugin = OverlayPlugin(image_filter=filter.canny) plugin += Slider('sigma', 0, 5, update_on='release') viewer += plugin viewer.show()
from skimage import data from skimage.filter import median_filter from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider, OKCancelButtons, SaveButtons from skimage.viewer.plugins.base import Plugin image = data.coins() viewer = ImageViewer(image) plugin = Plugin(image_filter=median_filter) plugin += Slider('radius', 2, 10, value_type='int') plugin += SaveButtons() plugin += OKCancelButtons() viewer += plugin viewer.show()
def __init__(self, search_pattern): plugin = Plugin(image_filter=self.image_filter, dock="right") self.setup_names = [ 'Sobel Thresh X', 'Sobel Thresh Y', 'Sobel Thresh X / Y', 'Magnitude Thresh', 'Gradient Direction', 'Magnitude / Gradient Direction Thresh', "2 & 2", "2 | 2" ] self.show_orig = CheckBox('show_orig', value=False, alignment='left') plugin += self.show_orig plugin += ComboBox('setup', self.setup_names) plugin += Slider('grad_ksize', 0, 31, value=grad_ksize, value_type='int') plugin += Slider('grad_thresh_low', 0, 255, value=grad_thresh_low, value_type='int') plugin += Slider('grad_thresh_high', 0, 255, value=grad_thresh_high, value_type='int') plugin += Slider('mag_binary_ksize', 0, 31, value=mag_binary_ksize, value_type='int') plugin += Slider('mag_binary_thresh_low', 0, 255, value=mag_binary_thresh_low, value_type='int') plugin += Slider('mag_binary_thresh_high', 0, 255, value=mag_binary_thresh_high, value_type='int') plugin += Slider('dir_binary_ksize', 0, 31, value=dir_binary_ksize, value_type='int') plugin += Slider('dir_binary_thresh_low', 0, np.pi, value=dir_binary_thresh_low) plugin += Slider('dir_binary_thresh_high', 0, np.pi, value=dir_binary_thresh_high) fnames = [path for path in glob.iglob(search_pattern, recursive=True)] images, gray_images = read_images(fnames) self.viewer = CollectionViewer(images) self.viewer += plugin
from skimage import data from skimage.restoration import denoise_tv_chambolle from skimage.util import img_as_float from numpy import random, clip from skimage.viewer import ImageViewer from skimage.viewer.widgets import (Slider, CheckBox, OKCancelButtons, SaveButtons) from skimage.viewer.plugins.base import Plugin image = img_as_float(data.chelsea()) sigma = 30 / 255. image = image + random.normal(loc=0, scale=sigma, size=image.shape) image = clip(image, 0, 1) viewer = ImageViewer(image) plugin = Plugin(image_filter=denoise_tv_chambolle) plugin += Slider('weight', 0.01, 5, value=0.3, value_type='float') plugin += Slider('n_iter_max', 1, 100, value=20, value_type='int') plugin += CheckBox('multichannel', value=True) plugin += SaveButtons() plugin += OKCancelButtons() viewer += plugin viewer.show()
end_points = np.asarray(end_points)[:, ::-1] image[draw.line(*np.ravel(end_points))] = 1 return image def hough_lines(image, *args, **kwargs): # Set threshold to 0.5 since we're working with a binary image (from canny) lines = probabilistic_hough_line(image, threshold=0.5, *args, **kwargs) image = line_image(image.shape, lines) return image image = data.camera() canny_viewer = ImageViewer(image) canny_plugin = CannyPlugin() canny_viewer += canny_plugin hough_plugin = OverlayPlugin(image_filter=hough_lines) hough_plugin.name = 'Hough Lines' hough_plugin += Slider('line length', 0, 100) hough_plugin += Slider('line gap', 0, 20) # Passing a plugin to a viewer connects the output of the plugin to the viewer. hough_viewer = ImageViewer(canny_plugin) hough_viewer += hough_plugin # Show viewers displays both viewers since `hough_viewer` is connected to # `canny_viewer` through `canny_plugin` canny_viewer.show()
from skimage import data from skimage.filter import median_filter from skimage.viewer import ImageViewer from skimage.viewer.widgets import Slider, OKCancelButtons, SaveButtons from skimage.viewer.plugins.base import Plugin image = data.coins() viewer = ImageViewer(image) plugin = Plugin(image_filter=median_filter) plugin += Slider('radius', 2, 10, value_type='int', update_on='release') plugin += SaveButtons() plugin += OKCancelButtons() viewer += plugin viewer.show()
from skimage import data from skimage.filters import rank from skimage.filters import threshold_isodata from skimage.morphology import disk from skimage.viewer import CollectionViewer from skimage.viewer.widgets import Slider from skimage.viewer.plugins.base import Plugin # Wrap autolevel function to make the disk size a filter argument. def autolevel(image, nbins): return threshold_isodata(image) return rank.autolevel(image, nbins) [row,:, 0] img_collection = [data.camera(), data.coins(), data.text()] plugin = Plugin(image_filter=autolevel) plugin += Slider('nbins', 1, 255, value_type='int') # plugin.name = "Autolevel" viewer = CollectionViewer(img_collection) viewer += plugin viewer.show()
def __init__(self, search_pattern): self.plugin = Plugin(image_filter=self.image_filter, dock="right") self.setup_names = ['Yellow', 'White', 'Yellow / White'] self.color_spaces = ['LAB', 'HSV', 'HLS', 'LUV'] self.show_orig = CheckBox('show_orig', value=False, alignment='left') self.plugin += self.show_orig self.setup = ComboBox('setup', self.setup_names) self.color_space = ComboBox('color_space', self.color_spaces) self.sensity_range = Slider('sensity_range', 10, 100, value=sensity_range, value_type='int') self.lower_yellow_1 = Slider('lower_yellow_1', 0, 255, value=lower_yellow_1, value_type='int') self.lower_yellow_2 = Slider('lower_yellow_2', 0, 255, value=lower_yellow_2, value_type='int') self.lower_yellow_3 = Slider('lower_yellow_3', 0, 255, value=lower_yellow_3, value_type='int') self.upper_yellow_1 = Slider('upper_yellow_1', 0, 255, value=upper_yellow_1, value_type='int') self.upper_yellow_2 = Slider('upper_yellow_2', 0, 255, value=upper_yellow_2, value_type='int') self.upper_yellow_3 = Slider('upper_yellow_3', 0, 255, value=upper_yellow_3, value_type='int') self.lower_white_1 = Slider('lower_white_1', 0, 255, value=lower_white_1, value_type='int') self.lower_white_2 = Slider('lower_white_2', 0, 255, value=lower_white_2, value_type='int') self.lower_white_3 = Slider('lower_white_3', 0, 255, value=lower_white_3, value_type='int') self.upper_white_1 = Slider('upper_white_1', 0, 255, value=upper_white_1, value_type='int') self.upper_white_2 = Slider('upper_white_2', 0, 255, value=upper_white_2, value_type='int') self.upper_white_3 = Slider('upper_white_3', 0, 255, value=upper_white_3, value_type='int') self.plugin += self.setup self.plugin += self.color_space # self.plugin += self.sensity_range self.plugin += self.lower_yellow_1 self.plugin += self.lower_yellow_2 self.plugin += self.lower_yellow_3 self.plugin += self.upper_yellow_1 self.plugin += self.upper_yellow_2 self.plugin += self.upper_yellow_3 self.plugin += self.lower_white_1 self.plugin += self.lower_white_2 self.plugin += self.lower_white_3 self.plugin += self.upper_white_1 self.plugin += self.upper_white_2 self.plugin += self.upper_white_3 fnames = [path for path in glob.iglob(search_pattern, recursive=True)] images, gray_images = read_images(fnames) self.viewer = CollectionViewer(images) self.viewer.connect_event('button_press_event', self.on_filter_color) self.viewer.connect_event('key_press_event', self.on_press) self.viewer += self.plugin
print(value) return # image = data.camera() image = imread( '/Users/zhizhao/PycharmProjects/BOFO/Devlog/test.jpg') # True means gray # You can create a UI for a filter just by passing a filter function... # plugin = OverlayPlugin(image_filter=canny) plugin = Plugin() # plugin = OverlayPlugin() # plugin = LabelPainter() # plugin = PlotPlugin() # ... and adding widgets to adjust parameter values. plugin += Slider( 'sigma', 0, 5, value_type='int', value=3, callback=printf ) # name, low=0.0, high=1.0, value=None, value_type='float','int',orientation='horizontal'/'vertical' # plugin += Button('name',callback=printf) # name, callback # plugin += ComboBox('Combo', ['123', '312', 'rqr']) # name, items, ptype='kwarg', callback=None plugin += Text('text', text='printtext') # name=None, text='' # plugin += SaveButtons() plugin += CheckBox( 'check', value=False, alignment='left' ) # name, value=False, alignment='center'/'left'/'right', ptype='kwarg',callback=None # ... and we can also add buttons to save the overlay: # plugin += SaveButtons(name='Save overlay to:') # Finally, attach the plugin to an image viewer. viewer = ImageViewer(image) viewer += plugin viewer.show()[0][0]
from skimage.viewer.plugins.canny import CannyPlugin def line_image(shape, lines): image = np.zeros(shape, dtype=bool) for end_points in lines: end_points = np.asarray(end_points)[:, ::-1] image[draw.line(*np.ravel(end_points))] = 1 return image def hough_lines(image, *args, **kwargs): lines = probabilistic_hough_line(image, threshold=0.5, *args, **kwargs) image = line_image(image.shape, lines) return image image = data.camera() canny_viewer = ImageViewer(image) canny_plugin = CannyPlugin() canny_viewer += canny_plugin hough_plugin = OverlayPlugin(image_filter=hough_lines) hough_plugin += Slider('line length', 0, 100, value=100, update_on='move') hough_plugin += Slider('line gap', 0, 20, value=0, update_on='move') hough_viewer = ImageViewer(canny_plugin) hough_viewer += hough_plugin canny_viewer.show()