zoukankan      html  css  js  c++  java
  • 6.边缘提取--Max-Min

    一、算法原理

     

    图像的细节属于低频信息,图像的边缘属于高频信息。我们使用一定大小的 Max-Min 滤波器作用于图像,当滤波器作用于图像细节时,输出结果往往趋向于0(黑色);而滤波器作用于图像边缘时,Max-Min 输出结果往往趋向于255(白色)。
    所以 最大-最小滤波器 能有效地用于检测图像的边缘和轮廓。

    二、算法实现

    const int kernel = 3;
    Mat MaxMinEdge(Mat& img)
    {
        if (img.data)
        {
            int height = img.rows;
            int width = img.cols;
            Mat gray_image = Mat::zeros(height, width, CV_8UC1);
            for(int i = 0; i < height;i++)
            {
                for (int j = 0; j < width; j++)
                {
                    gray_image.at<uchar>(i,j) = 0.2126 * (float)img.at<cv::Vec3b>(i, j)[2] 
                        + 0.7152 * (float)img.at<cv::Vec3b>(i,j)[1] 
                        + 0.0722 * (float)img.at<cv::Vec3b>(i, j)[0];
                }
            }
            imshow("gray image ", gray_image);
    
            Mat edge = Mat::zeros(height, width, CV_8UC1);
            int max = 0, min = 999;
            int pad = floor(kernel/2);
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    max = 0;
                    min = 999;
                    for (int y = -pad; y < pad + 1; y++)
                    {
                        for (int x = -pad; x < pad + 1; x++)
                        {
                            if (((i + y) < height) && ((x + j) < width)&& ((i-pad) > 0) && ((j -pad) > 0))
                            {
                                if (max < (int)gray_image.at<uchar>(i + y, j + x))
                                    max = (int)gray_image.at<uchar>(i + y, j + x);
                                if (min > (int)gray_image.at<uchar>(i + y, j + x))
                                    min = (int)gray_image.at<uchar>(i + y, j + x);
                            }
                        }
                    }
                    edge.at<uchar>(i, j) = (uchar)(max - min);
                }
            }
            return edge;
        }
    }
  • 相关阅读:
    异或运算
    GitHub使用简介
    归并排序
    快速排序
    字符串匹配
    Runner站立会议06
    Runner站立会议05
    Runner站立会议04
    记计账需求分析
    Runner站立会议03
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/13275185.html
Copyright © 2011-2022 走看看