|
|
|
|
from PyQt5.QtWidgets import QListWidgetItem
|
|
|
|
|
from flags import *
|
|
|
|
|
|
|
|
|
|
# 功能区引用
|
|
|
|
|
# 几何变换
|
|
|
|
|
from function.GeometricTrans.Ratate import ratate
|
|
|
|
|
from function.GeometricTrans.Mirror import mirror1,mirror2,mirror3
|
|
|
|
|
from function.GeometricTrans.LargeSmall import largeSmall
|
|
|
|
|
# 灰度变换
|
|
|
|
|
from function.GrayscaleTrans.Reverse import image_reverse
|
|
|
|
|
from function.GrayscaleTrans.GammaTrans import gammaTranform
|
|
|
|
|
from function.GrayscaleTrans.Binarization import binarization
|
|
|
|
|
from function.GrayscaleTrans.BGR2GRAY import rgbToGray
|
|
|
|
|
# 直方图处理
|
|
|
|
|
from function.HistogramTrans.Equalize import hist_equal
|
|
|
|
|
from function.HistogramTrans.HistogramMatch import HisgramMatch
|
|
|
|
|
# 平滑处理
|
|
|
|
|
from function.SmoothingTrans.GaussianFilter import gaussian_filter
|
|
|
|
|
from function.SmoothingTrans.MeanFilter import mean_filter
|
|
|
|
|
from function.SmoothingTrans.MedianFilter import median_filter
|
|
|
|
|
# 锐化处理
|
|
|
|
|
from function.SharpenTrans.SobelFilter import sobel_filter
|
|
|
|
|
from function.SharpenTrans.Robert import robert
|
|
|
|
|
from function.SharpenTrans.Laplacian import laplacian_filter
|
|
|
|
|
from function.SharpenTrans.Prewitt import prewitt_filter
|
|
|
|
|
from function.SharpenTrans.Canny import CannyFilter
|
|
|
|
|
from function.SharpenTrans.LoG import LogFilter
|
|
|
|
|
# 加性噪声
|
|
|
|
|
from function.AddNoise.GasussNoise import gasuss_noise
|
|
|
|
|
from function.AddNoise.ImpluseNoise import impluse_noise
|
|
|
|
|
from function.AddNoise.RayleighNoise import rayleigh_noise
|
|
|
|
|
from function.AddNoise.GammaNoise import gamma_noise
|
|
|
|
|
from function.AddNoise.UniformNoise import uniform_noise
|
|
|
|
|
from function.AddNoise.ExponentialNoise import exponential_noise
|
|
|
|
|
# 频域滤波 | 选择滤波
|
|
|
|
|
from function.FrequencyDomainFilter.ButterWorthFilter import butterworthSelectFilter, butterworthFilter
|
|
|
|
|
from function.FrequencyDomainFilter.IdealFilter import idealFilter,idealSelectFilter,idealNotchFilter
|
|
|
|
|
from function.FrequencyDomainFilter.GaussianFrequencyFilter import GaussianFilter,GaussianSelectFilter
|
|
|
|
|
# 彩色图像处理
|
|
|
|
|
from function.ColorImageProcess.HSIProcess import hsvProcess, rgb2hsi
|
|
|
|
|
from function.ColorImageProcess.RGB2CMY import rgb2cmy
|
|
|
|
|
from function.ColorImageProcess.PseudoColorTrans import pseudoColorTrans
|
|
|
|
|
#线条变换和图片修复
|
|
|
|
|
from function.LineChange.AffineTransformation import Affine
|
|
|
|
|
from function.LineChange.LineCheck import LineCheck
|
|
|
|
|
from function.LineChange.ImgeFix import ImgeFix
|
|
|
|
|
# 证件照生成
|
|
|
|
|
from function.IdCardPicGenerate.IdCardPicGenerate import idCardPicGenerate
|
|
|
|
|
# 美颜功能
|
|
|
|
|
from function.Beauty.Beauty import Beauty
|
|
|
|
|
|
|
|
|
|
class MyItem(QListWidgetItem):
|
|
|
|
|
def __init__(self, name=None, parent=None):
|
|
|
|
|
super(MyItem, self).__init__(name, parent=parent)
|
|
|
|
|
|
|
|
|
|
def get_params(self):
|
|
|
|
|
protected = [v for v in dir(self) if v.startswith('_') and not v.startswith('__')]
|
|
|
|
|
param = {}
|
|
|
|
|
for v in protected:
|
|
|
|
|
param[v.replace('_', '', 1)] = self.__getattribute__(v)
|
|
|
|
|
return param
|
|
|
|
|
|
|
|
|
|
def update_params(self, param):
|
|
|
|
|
for k, v in param.items():
|
|
|
|
|
if '_' + k in dir(self):
|
|
|
|
|
self.__setattr__('_' + k, v)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GeometricTransItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super(GeometricTransItem, self).__init__(' 几何变换 ', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._rate = 100
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = largeSmall(img,self._rate)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = mirror1(img,self._rate)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = mirror2(img,self._rate)
|
|
|
|
|
elif self._kind == 3:
|
|
|
|
|
img = mirror3(img,self._rate)
|
|
|
|
|
elif self._kind == 4:
|
|
|
|
|
img = ratate(img,self._rate)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class GrayingItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super(GrayingItem, self).__init__(' 灰度变换 ', parent=parent)
|
|
|
|
|
self._kind = RBG2GRAY
|
|
|
|
|
self._c_value = 1
|
|
|
|
|
self._γ_value = 3.0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = rgbToGray(img)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = image_reverse(img)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = binarization(img)
|
|
|
|
|
elif self._kind == 3:
|
|
|
|
|
img = gammaTranform(self._c_value,self._γ_value,img)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EqualizeItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__(' 直方图处理 ', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = hist_equal(img)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = HisgramMatch(img)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class AffineItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__(' 变换 ', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = Affine(img)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = LineCheck(img)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = ImgeFix(img)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class BeautyItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('美颜功能', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
img = Beauty(img)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class FilterItem(MyItem):
|
|
|
|
|
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('平滑处理', parent=parent)
|
|
|
|
|
self._ksize = 3
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._sigma = 1
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = cv2.blur(img, (self._ksize, self._ksize))
|
|
|
|
|
# img = mean_filter(img,self._ksize)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
# cv2实现的中值滤波
|
|
|
|
|
img = cv2.medianBlur(img, self._ksize)
|
|
|
|
|
# python实现的中值滤波
|
|
|
|
|
# img = median_filter(img, self._ksize)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
# img = cv2.GaussianBlur(img, (self._ksize, self._ksize), self._sigma)
|
|
|
|
|
img = gaussian_filter(img,self._ksize,self._sigma)
|
|
|
|
|
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SharpenItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('锐化处理', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
# python实现
|
|
|
|
|
img = sobel_filter(img)
|
|
|
|
|
# cv2实现
|
|
|
|
|
# img = cv2_sobel(img)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = robert(img)
|
|
|
|
|
# cv2实现
|
|
|
|
|
# img = cv2_robert(img)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = prewitt_filter(img)
|
|
|
|
|
elif self._kind == 3:
|
|
|
|
|
img = laplacian_filter(img)
|
|
|
|
|
elif self._kind == 4:
|
|
|
|
|
img = CannyFilter(img)
|
|
|
|
|
elif self._kind == 5:
|
|
|
|
|
img = LogFilter(img)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class AddNoiseItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('加性噪声', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._scale = 0.1
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = gasuss_noise(img,self._scale)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = rayleigh_noise(img,self._scale)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = gamma_noise(img,self._scale)
|
|
|
|
|
elif self._kind == 3:
|
|
|
|
|
img = uniform_noise(img,self._scale)
|
|
|
|
|
elif self._kind == 4:
|
|
|
|
|
img = impluse_noise(img,self._scale)
|
|
|
|
|
elif self._kind == 5:
|
|
|
|
|
img = exponential_noise(img,self._scale)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class FrequencyFilterItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('频域滤波', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._scale = 30
|
|
|
|
|
self._n = 1
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0 or self._kind == 3:
|
|
|
|
|
img = idealFilter(img,self._scale,self._kind)
|
|
|
|
|
elif self._kind == 1 or self._kind == 4:
|
|
|
|
|
img = butterworthFilter(img,self._scale,self._n,self._kind)
|
|
|
|
|
elif self._kind == 2 or self._kind == 5:
|
|
|
|
|
img = GaussianFilter(img,self._scale,self._kind)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SelectFilterItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('选择滤波', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._scale = 30
|
|
|
|
|
self._n = 1
|
|
|
|
|
self._W = 10
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0 or self._kind == 3:
|
|
|
|
|
img = idealSelectFilter(img,self._scale,self._W,self._kind)
|
|
|
|
|
elif self._kind == 1 or self._kind == 4:
|
|
|
|
|
img = butterworthSelectFilter(img,self._scale,self._n,self._W,self._kind)
|
|
|
|
|
elif self._kind == 2 or self._kind == 5:
|
|
|
|
|
img = GaussianSelectFilter(img,self._scale,self._W,self._kind)
|
|
|
|
|
elif self._kind == 6 or self._kind == 7:
|
|
|
|
|
img = idealNotchFilter(img,self._scale,self._kind)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
class ColorImageProcessItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('彩色图像处理', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._H = 100
|
|
|
|
|
self._S = 100
|
|
|
|
|
self._V = 100
|
|
|
|
|
self._color_kind = 0
|
|
|
|
|
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
if self._kind == 0:
|
|
|
|
|
img = hsvProcess(img,self._H,self._S,self._V)
|
|
|
|
|
elif self._kind == 1:
|
|
|
|
|
img = rgb2cmy(img,self._H,self._S,self._V)
|
|
|
|
|
elif self._kind == 2:
|
|
|
|
|
img = rgb2hsi(img,self._H,self._S,self._V)
|
|
|
|
|
elif self._kind == 3:
|
|
|
|
|
img = pseudoColorTrans(img,self._H,self._S,self._V,self._color_kind)
|
|
|
|
|
return img
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IdCardPicGenerateItem(MyItem):
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
|
super().__init__('人像背景切换', parent=parent)
|
|
|
|
|
self._kind = 0
|
|
|
|
|
self._H = 100
|
|
|
|
|
self._S = 100
|
|
|
|
|
self._V = 100
|
|
|
|
|
def __call__(self, img):
|
|
|
|
|
img = idCardPicGenerate(img, self._kind)
|
|
|
|
|
return img
|