【问题标题】:Implementation of Matlab API ordfilt2 in OpenCVOpenCV中Matlab API ordfilt2的实现
【发布时间】:2013-05-22 06:41:16
【问题描述】:

我正在将用 Matlab 编写的代码翻译成 OpenCV。 在 Matlab 中,有 ordfilt2 函数。 OpenCV中是否有类似的实现? 谢谢

【问题讨论】:

    标签: opencv


    【解决方案1】:

    我在 Matlab 中使用 OpenCV 中的腐蚀或膨胀实现了 ordfilt2()。 Matlab中的ordfilt2(A,1,ones(3,3))是腐蚀函数,可以用OpenCV中的cv::erode(im, mx, mk,cv::Point(-1,-1),1,BORDER_CONSTANT );代替。 Matlab 中的 ordfilt2(A,9,ones(3,3)) 是膨胀的,可以替换为cv::dilate(im, mx, mk,cv::Point(-1,-1),1,BORDER_CONSTANT );。

    【讨论】:

      【解决方案2】:

      我不认为有一个通用的。浏览here 查找是否适合您。

      来自 Matlab 帮助:

      B = ordfilt2(A, order, domain) 将 A 中的每个元素替换为 由 域中的非零元素。

      所以你有一个图像 A,你的幻灯片有一个内核(域),它对像素值进行排序,你总是选择一个特定的顺序。

      OpenCV 步骤(用于灰度图像):

      1) 克隆图片画布

      2) 在画布的每个像素上滑动

      3) 在图像上创建相同像素的子区域的矢量

      4) 对向量进行排序

      5) 将新的图像像素值设置为所需的向量元素。

      【讨论】:

        【解决方案3】:
        dilation = ordfilt2(proj, 5, ones(1,5));  %in matlab
        
        Following is my implementation in opencv, proj is 1D matrix of size (26,1)
        Mat dilation = proj.clone(); Mat array = Mat::zeros(5, 1, CV_32FC1);
            for (int i = 0; i < 26; i++)
            {
                (i - 2) < 0 ? array.at<float>(0, 0) = 0 : array.at<float>(0, 0) = proj.at<float>(i - 2, 0);
                (i - 1) < 0 ? array.at<float>(1, 0) = 0 : array.at<float>(1, 0) = proj.at<float>(i - 1, 0);
                (i) < 0 ? array.at<float>(2, 0) = 0 : array.at<float>(2, 0) = proj.at<float>(i, 0);
                (i + 1) >= 26? array.at<float>(3, 0) = 0 : array.at<float>(3, 0) = proj.at<float>(i + 1, 0);
                (i + 2) >= 26? array.at<float>(4, 0) = 0 : array.at<float>(4, 0) = proj.at<float>(i + 2, 0);
                float temp = 0;
                for (int j = 0; j < 5; j++)
                {
                    if (temp < array.at<float>(j, 0))
                        temp = array.at<float>(j, 0);
                }
                dilation.at<float>(i, 0) = temp;
            }
        

        【讨论】:

          猜你喜欢
          • 2023-03-22
          • 1970-01-01
          • 2013-07-13
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 2014-05-28
          • 1970-01-01
          • 2013-11-27
          相关资源
          最近更新 更多