mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-27 21:53:30 +08:00
added regular gamma to the mixer, refactored more of fancy imshow.
This commit is contained in:
@@ -16,6 +16,7 @@ import cython
|
||||
|
||||
cdef extern from "math.h":
|
||||
float exp(float)
|
||||
float pow(float, float)
|
||||
|
||||
|
||||
@cython.boundscheck(False)
|
||||
@@ -168,6 +169,27 @@ def sigmoid_gamma(np.ndarray[np.uint8_t, ndim=3] img,
|
||||
img[i,j,2] = <np.uint8_t>(b * 255)
|
||||
|
||||
|
||||
@cython.boundscheck(False)
|
||||
def gamma(np.ndarray[np.uint8_t, ndim=3] img,
|
||||
np.ndarray[np.uint8_t, ndim=3] stateimg,
|
||||
float gamma):
|
||||
|
||||
cdef int height = img.shape[0]
|
||||
cdef int width = img.shape[1]
|
||||
|
||||
cdef float r, g, b
|
||||
|
||||
cdef int i, j
|
||||
for i in range(height):
|
||||
for j in range(width):
|
||||
r = <float>stateimg[i,j,0] / 255.
|
||||
g = <float>stateimg[i,j,1] / 255.
|
||||
b = <float>stateimg[i,j,2] / 255.
|
||||
|
||||
img[i,j,0] = <np.uint8_t>(pow(r, gamma) * 255)
|
||||
img[i,j,1] = <np.uint8_t>(pow(g, gamma) * 255)
|
||||
img[i,j,2] = <np.uint8_t>(pow(b, gamma) * 255)
|
||||
|
||||
|
||||
|
||||
cdef void rgb_2_hsv(float* RGB, float* HSV):
|
||||
|
||||
@@ -83,6 +83,7 @@ class MixerPanel(QWidget):
|
||||
|
||||
self.combo_box_entries = ['RGB Color', 'HSV Color',
|
||||
'Brightness/Contrast',
|
||||
'Gamma',
|
||||
'Gamma (Sigmoidal)']
|
||||
self.combo_box = QtGui.QComboBox()
|
||||
for entry in self.combo_box_entries:
|
||||
@@ -160,21 +161,33 @@ class MixerPanel(QWidget):
|
||||
self.bright_widget.layout.addWidget(self.bright, 0, 1)
|
||||
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Gamma sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# sliders
|
||||
alpha = IntelligentSlider('alpha', 0.011, 1, self.gamma_changed)
|
||||
beta = IntelligentSlider('beta', 0.012, 0, self.gamma_changed)
|
||||
self.a_gamma = alpha
|
||||
self.b_gamma = beta
|
||||
#-----------------------------------------------------------------------
|
||||
# Gamma Slider
|
||||
#-----------------------------------------------------------------------
|
||||
gamma = IntelligentSlider('gamma', 0.005, 0, self.gamma_changed)
|
||||
self.gamma = gamma
|
||||
|
||||
# layout
|
||||
self.gamma_widget = QWidget()
|
||||
self.gamma_widget.layout = QtGui.QGridLayout(self.gamma_widget)
|
||||
self.gamma_widget.layout.addWidget(self.a_gamma, 0, 0)
|
||||
self.gamma_widget.layout.addWidget(self.b_gamma, 0, 1)
|
||||
self.gamma_widget.layout.addWidget(self.gamma, 0, 0)
|
||||
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Sigmoid Gamma sliders
|
||||
#---------------------------------------------------------------
|
||||
|
||||
# sliders
|
||||
alpha = IntelligentSlider('alpha', 0.011, 1, self.sig_gamma_changed)
|
||||
beta = IntelligentSlider('beta', 0.012, 0, self.sig_gamma_changed)
|
||||
self.a_gamma = alpha
|
||||
self.b_gamma = beta
|
||||
|
||||
# layout
|
||||
self.sig_gamma_widget = QWidget()
|
||||
self.sig_gamma_widget.layout = QtGui.QGridLayout(self.sig_gamma_widget)
|
||||
self.sig_gamma_widget.layout.addWidget(self.a_gamma, 0, 0)
|
||||
self.sig_gamma_widget.layout.addWidget(self.b_gamma, 0, 1)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Buttons
|
||||
@@ -192,6 +205,7 @@ class MixerPanel(QWidget):
|
||||
self.sliders.addWidget(self.hsv_widget)
|
||||
self.sliders.addWidget(self.bright_widget)
|
||||
self.sliders.addWidget(self.gamma_widget)
|
||||
self.sliders.addWidget(self.sig_gamma_widget)
|
||||
|
||||
self.layout = QtGui.QGridLayout(self)
|
||||
self.layout.addWidget(self.combo_box, 0, 0)
|
||||
@@ -253,8 +267,9 @@ class MixerPanel(QWidget):
|
||||
self.bright.set_value(0)
|
||||
self.cont.set_value(1.)
|
||||
|
||||
self.gamma.set_value(1)
|
||||
self.a_gamma.set_value(1)
|
||||
self.b_gamma.set_value(0)
|
||||
self.b_gamma.set_value(0.5)
|
||||
|
||||
|
||||
def rgb_changed(self, name, val):
|
||||
@@ -299,6 +314,12 @@ class MixerPanel(QWidget):
|
||||
self.callback()
|
||||
|
||||
def gamma_changed(self, name, val):
|
||||
self.mixer.gamma(val)
|
||||
|
||||
if self.callback:
|
||||
self.callback()
|
||||
|
||||
def sig_gamma_changed(self, name, val):
|
||||
ag = self.a_gamma.val()
|
||||
bg = self.b_gamma.val()
|
||||
self.mixer.sigmoid_gamma(ag, bg)
|
||||
@@ -306,39 +327,13 @@ class MixerPanel(QWidget):
|
||||
if self.callback:
|
||||
self.callback()
|
||||
|
||||
def iter_all_sliders(self):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def hide_sliders(self):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def show_rgb(self):
|
||||
self.hide_sliders()
|
||||
self.rgb_widget.show()
|
||||
|
||||
def show_hsv(self):
|
||||
self.hide_sliders()
|
||||
self.hsv_widget.show()
|
||||
|
||||
def show_bright(self):
|
||||
self.hide_sliders()
|
||||
self.bright_widget.show()
|
||||
|
||||
def show_gamma(self):
|
||||
self.hide_sliders()
|
||||
self.gamma_sliders.show()
|
||||
|
||||
def commit_changes(self):
|
||||
self.mixer.commit_changes()
|
||||
self.update()
|
||||
self.reset_sliders()
|
||||
|
||||
def revert_changes(self):
|
||||
self.mixer.revert()
|
||||
self.reset_sliders()
|
||||
self.update()
|
||||
|
||||
if self.callback:
|
||||
self.callback()
|
||||
@@ -261,6 +261,9 @@ class ColorMixer(object):
|
||||
def sigmoid_gamma(self, alpha, beta):
|
||||
_colormixer.sigmoid_gamma(self.img, self.stateimg, alpha, beta)
|
||||
|
||||
def gamma(self, gamma):
|
||||
_colormixer.gamma(self.img, self.stateimg, gamma)
|
||||
|
||||
def hsv_add(self, h_amt, s_amt, v_amt):
|
||||
'''Adjust the H, S, V channels of an image by a constant ammount.
|
||||
This is similar to the add() mixer function, but operates over the
|
||||
|
||||
Reference in New Issue
Block a user