added regular gamma to the mixer, refactored more of fancy imshow.

This commit is contained in:
sccolbert
2009-11-06 17:31:27 +01:00
parent ae9f9cc2ca
commit cf19f11bbb
3 changed files with 62 additions and 42 deletions
+22
View File
@@ -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):
+37 -42
View File
@@ -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()
+3
View File
@@ -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