use singe_cuda::memory::DeviceMemory;
use crate::{
context::StreamContext,
error::Result,
image::view::{ImageView, MaskView},
};
pub trait MaskedNormRelativeImage<T, L> {
fn norm_relative_inf_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
fn norm_relative_l1_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
fn norm_relative_l2_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
}
pub trait MaskedChannelNormRelativeImage<T, L> {
fn norm_relative_inf_channel_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
channel: usize,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
fn norm_relative_l1_channel_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
channel: usize,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
fn norm_relative_l2_channel_masked(
stream_context: &StreamContext,
source_1: &ImageView<'_, T, L>,
source_2: &ImageView<'_, T, L>,
mask: &MaskView<'_>,
channel: usize,
output: &mut DeviceMemory<f64>,
) -> Result<()>;
}