使用emgu cv库而不是for循环优化像素图像比较

时间:2015-08-07 17:33:40

标签: c# opencv

  • 我正在开展一个隐形水印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);
                                }
    

0 个答案:

没有答案