import { PrintObject } from "./PrintObject";
import { Image } from "./Image";

/**
 * @class gve.Kernel
 * @since gve
 */
export class Kernel extends PrintObject {
  /**
   * 构造Kernel对象
   * @hideconstructor
   * @return gve.Kernel
   * @tutorial gve
   */
  constructor() {
    super();
    if (!(this instanceof Kernel)) {
      return new Kernel();
    }
  }

  /**
   * 图像边缘检测算法之Roberts算子
   * @param {Image} image 待边缘检测的影像路径
   * @returns Image
   * @tutorial gve.Kernel
   */
  static roberts(image: Image) {
    return new Image();
  }

  /**
   * 图像边缘检测算法之Sobel算子
   * @param {Image} image 待边缘检测的影像路径
   * @returns Image
   * @tutorial gve.Kernel
   */
  static sobel(image: Image) {
    return new Image();
  }

  /**
   * 图像边缘检测算法之Prewitt算子
   * @param {Image} image 待边缘检测的影像路径
   * @returns Image
   * @tutorial gve.Kernel
   */
  static prewitt(image: Image) {
    return new Image();
  }

  /**
   * 图像边缘检测算法之laplacian算子
   * @param {Image} image 待边缘检测的影像路径
   * @returns Image
   * @tutorial gve.Kernel
   */
  static laplacian(image: Image) {
    return new Image();
  }

  // /**
  //  * 图像边缘检测算法之gaussian算子
  //  * @param {Image} image 待边缘检测的影像路径
  //  * @param {Number} ksize 高斯核大小,必须为奇数和正数, 默认值:3
  //  * @param {Number} sigma 高斯标准差,如果为负数,内部会根据ksize进行转化, 默认值:1
  //  * @returns Image
  //  * @tutorial gve.Kernel
  //  */
  // static gaussian(image: Image, ksize: number = 3, sigma: number = 1) {
  //   return new Image();
  // }

  /**
   * 边缘检测图像
   * @param {Image} image 待边缘检测的影像路径
   * @param {Number} threshold1 边缘检测的第一个阈值
   * @param {Number} threshold2 边缘检测的第二个阈值
   * @returns Image
   * @tutorial gve.Kernel
   */
  static canny(
    image: Image,
    threshold1: number,
    threshold2: number
  ) {
    return new Image();
  }

  /**
   *  图像边缘检测算法之square正方形核
   * @param {number} [radius] 核半径
   * @param {boolean} [normalize] 归一化
   * @param {number} [magnitude] 核系数
   * @returns Kernel
   * @tutorial gve.Kernel
   */
  static square(
    radius?: number,
    normalize?: boolean,
    magnitude?: number
  ) {
    return new Kernel();
  }

  /**
   *  图像边缘检测算法之gaussian核
   * @param {number} [radius] 核半径
   * @param {boolean} [normalize] 归一化
   * @param {number} [magnitude] 核系数
   * @returns Kernel
   * @tutorial gve.Kernel
   */
  static gaussian(
    radius?: number,
    normalize?: boolean,
    magnitude?: number
  ) {
    return new Kernel();
  }

  /**
   *  图像边缘检测算法之laplacian4核
   * @param {number} [magnitude] 核系数
   * @param {boolean} [normalize] 归一化
   * @returns Kernel
   * @tutorial gve.Kernel
   */
  static laplacian4(
    magnitude?: number,
    normalize?: boolean
  ) {
    return new Kernel();
  }

}