File indexing completed on 2024-05-12 15:58:17
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_GAUSSIAN_KERNEL_H 0008 #define __KIS_GAUSSIAN_KERNEL_H 0009 0010 #include "kritaimage_export.h" 0011 #include "kis_types.h" 0012 #include "kis_convolution_painter.h" 0013 0014 #include <Eigen/Core> 0015 0016 class QRect; 0017 0018 class KRITAIMAGE_EXPORT KisGaussianKernel 0019 { 0020 public: 0021 static Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> 0022 createHorizontalMatrix(qreal radius); 0023 0024 static Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> 0025 createVerticalMatrix(qreal radius); 0026 0027 static KisConvolutionKernelSP 0028 createHorizontalKernel(qreal radius); 0029 0030 static KisConvolutionKernelSP 0031 createVerticalKernel(qreal radius); 0032 0033 static KisConvolutionKernelSP 0034 createUniform2DKernel(qreal xRadius, qreal yRadius); 0035 0036 static qreal sigmaFromRadius(qreal radius); 0037 static int kernelSizeFromRadius(qreal radius); 0038 0039 static void applyGaussian(KisPaintDeviceSP device, 0040 const QRect& rect, 0041 qreal xRadius, qreal yRadius, 0042 const QBitArray &channelFlags, 0043 KoUpdater *updater, 0044 bool createTransaction = false, 0045 KisConvolutionBorderOp borderOp = BORDER_REPEAT); 0046 0047 static Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> createLoGMatrix(qreal radius, qreal coeff, bool zeroCentered, bool includeWrappedArea); 0048 0049 static void applyLoG(KisPaintDeviceSP device, 0050 const QRect& rect, 0051 qreal radius, 0052 qreal coeff, 0053 const QBitArray &channelFlags, 0054 KoUpdater *progressUpdater); 0055 0056 static void applyTightLoG(KisPaintDeviceSP device, 0057 const QRect& rect, 0058 qreal radius, qreal coeff, 0059 const QBitArray &channelFlags, 0060 KoUpdater *progressUpdater); 0061 0062 0063 static Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> createDilateMatrix(qreal radius); 0064 0065 static void applyDilate(KisPaintDeviceSP device, 0066 const QRect& rect, 0067 qreal radius, 0068 const QBitArray &channelFlags, 0069 KoUpdater *progressUpdater, 0070 bool createTransaction = false); 0071 0072 static void applyErodeU8(KisPaintDeviceSP device, 0073 const QRect& rect, 0074 qreal radius, 0075 const QBitArray &channelFlags, 0076 KoUpdater *progressUpdater, 0077 bool createTransaction = false); 0078 }; 0079 0080 #endif /* __KIS_GAUSSIAN_KERNEL_H */