我正在开展一个隐形水印c#项目。
要求是将水印图像嵌入到封面图像中 将每个水印图像像素与每个覆盖图像像素进行比较 基于阈值。
我使用了4个for循环来迭代水印图像和
封面图片。但它只适用于更小的图像(即:30x30
像素),我需要优化它以获得更大的图像并找到最佳图像
水印像素在封面图像位置的拟合位置。
我知道这不是最佳方式,而不是for循环我需要在 Emgu cv in c#中使用最佳库的建议来轻松完成这些。
< / LI>请建议一种方法来优化我的代码片段以获得更大的图像。感谢。
// iterate through watermark_img
for (int x = 0; x < watermark_img.Height; x++)
{
for (int y = 0; y < watermark_img.Width; y++)
{
//iterate through cover image
for (int i = 0; i < cover.Height; i++)
{
for (int j = 0; j < cover.Width; j++)
{
Bgr pixel_watermark = watermark_img[x, y];
Bgr pixel_cover = cover[i, j];
//get watermark pixel color values
double b_wm = pixel_watermark.Blue;
double g_wm = pixel_watermark.Green;
double r_wm = pixel_watermark.Red;
//get cover image pixel color values
double b_cov = pixel_cover.Blue;
double g_cov = pixel_cover.Green;
double r_cov = pixel_cover.Red;
//diff
double b_diff = Math.Abs(b_wm - b_cov);
double g_diff = Math.Abs(g_wm - g_cov);
double r_diff = Math.Abs(r_wm - r_cov);
//determine threshold ====== 7 (last 3 bits)
int threshold = 7;
if ((b_diff <= threshold) && (g_diff <= threshold) && (r_diff <= threshold))
{
flag = true;
count_hit[cnt - 1]++;
//MessageBox.Show("No of pixels qualified for embedding =\t", count_hit.ToString(), MessageBoxButtons.OK);
}
else
{
flag = false;
count_miss[cnt - 1]++;
// MessageBox.Show("Pixel count lesser than threshold =\t", count_miss.ToString(), MessageBoxButtons.OK);
}