// Path: desktop/src/main/java/com/cv4j/core/datamodel/ImageProcessor.java
// public interface ImageProcessor {
// 
// 	/** Returns the width of this image in pixels. */
// 	int getWidth();
// 
// 	/** Returns the height of this image in pixels. */
// 	int getHeight();
// 
// 	/** Returns the channels of this image. */
// 	int getChannels();
// 
// 	void getPixel(int row, int col, byte[] rgb);
// 
// 	/** get all pixels */
// 	int[] getPixels();
// 
// 	ImageData getImage();
// 
// 	/** Returns float array with one channel of image by index*/
// 	float[] toFloat(int index);
// 
// 	/** Returns int array with one channel of image by index*/
// 	int[] toInt(int index);
// 
// 	/** Returns byte array with one channel of image by index*/
// 	byte[] toByte(int index);
// 
// }
// 
// Path: desktop/src/main/java/com/cv4j/core/filters/BaseFilter.java
// public abstract class BaseFilter implements CommonFilter {
// 
//     protected int width;
//     protected int height;
//     protected byte[] R;
//     protected byte[] G;
//     protected byte[] B;
// 
//     @Override
//     public ImageProcessor filter(ImageProcessor src) {
// 
//         if (src == null) return null;
// 
//         if (!(src instanceof ColorProcessor)) return src;
// 
//         width = src.getWidth();
//         height = src.getHeight();
//         R = ((ColorProcessor)src).getRed();
//         G = ((ColorProcessor)src).getGreen();
//         B = ((ColorProcessor)src).getBlue();
// 
//         return doFilter(src);
//     }
// 
//     public abstract ImageProcessor doFilter(ImageProcessor src);
// }


import com.cv4j.core.datamodel.ImageProcessor;
import com.cv4j.core.filters.BaseFilter;
import java.util.Random;
/*
 * Copyright (c) 2017-present, CV4J Contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.cv4j.core.spatial.conv;



public class SAPNoiseFilter extends BaseFilter {
	private float precent;
	
	public SAPNoiseFilter() {
		precent = 0.01f;
	}

	public float getPrecent() {
		return precent;
	}

	public void setPrecent(float precent) {
		this.precent = precent;
	}

	@Override
	public ImageProcessor doFilter(ImageProcessor src) {

		Random random = new Random();
		int numOfSalt = (int)(width*height*precent);
		int row=0, col=0, index=0;
		for(int i=0; i<numOfSalt; i++) {
			row = getPosition(0, height, random);
			col = getPosition(0, width, random);
			index = row*width+col;
// Path: desktop/src/main/java/com/cv4j/core/datamodel/ImageProcessor.java
// public interface ImageProcessor {
// 
// 	/** Returns the width of this image in pixels. */
// 	int getWidth();
// 
// 	/** Returns the height of this image in pixels. */
// 	int getHeight();
// 
// 	/** Returns the channels of this image. */
// 	int getChannels();
// 
// 	void getPixel(int row, int col, byte[] rgb);
// 
// 	/** get all pixels */
// 	int[] getPixels();
// 
// 	ImageData getImage();
// 
// 	/** Returns float array with one channel of image by index*/
// 	float[] toFloat(int index);
// 
// 	/** Returns int array with one channel of image by index*/
// 	int[] toInt(int index);
// 
// 	/** Returns byte array with one channel of image by index*/
// 	byte[] toByte(int index);
// 
// }
// 
// Path: desktop/src/main/java/com/cv4j/core/filters/BaseFilter.java
// public abstract class BaseFilter implements CommonFilter {
// 
//     protected int width;
//     protected int height;
//     protected byte[] R;
//     protected byte[] G;
//     protected byte[] B;
// 
//     @Override
//     public ImageProcessor filter(ImageProcessor src) {
// 
//         if (src == null) return null;
// 
//         if (!(src instanceof ColorProcessor)) return src;
// 
//         width = src.getWidth();
//         height = src.getHeight();
//         R = ((ColorProcessor)src).getRed();
//         G = ((ColorProcessor)src).getGreen();
//         B = ((ColorProcessor)src).getBlue();
// 
//         return doFilter(src);
//     }
// 
//     public abstract ImageProcessor doFilter(ImageProcessor src);
// }


// Path: desktop/src/main/java/com/cv4j/core/spatial/conv/SAPNoiseFilter.java
import com.cv4j.core.datamodel.ImageProcessor;
import com.cv4j.core.filters.BaseFilter;
import java.util.Random;

/*
 * Copyright (c) 2017-present, CV4J Contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.cv4j.core.spatial.conv;



public class SAPNoiseFilter extends BaseFilter {
	private float precent;
	
	public SAPNoiseFilter() {
		precent = 0.01f;
	}

	public float getPrecent() {
		return precent;
	}

	public void setPrecent(float precent) {
		this.precent = precent;
	}

	@Override
	public ImageProcessor doFilter(ImageProcessor src) {

		Random random = new Random();
		int numOfSalt = (int)(width*height*precent);
		int row=0, col=0, index=0;
		for(int i=0; i<numOfSalt; i++) {
			row = getPosition(0, height, random);
			col = getPosition(0, width, random);
			index = row*width+col;
			R[index]= (byte)255;