CogIPOneImageTool

 这个工具下面有以下的运算符。

重点分析一波:高通过滤器(guass,mean,median)3种模式和灰阶NxM(erode,dilate,open,close,dilateminuserode,closeminusoriginal,originalminusopen)7种模式

高通过滤器:保留图像中频率比较高的部分,突出边缘。

处理模式:高斯guass,均值mean,中值median

处理方法:进行高斯,均值,中值平滑操作,然后从输入图像中减去结果图像

高斯滤波采用方式可以理解为距离权重,距离中心像素点约近权重值就越大,可以看到下图中心权重最大为0.4,4个对角距离最远,权重也是最小,为0.05。 

尝试用c++与opencv实现一下:

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
    // 读取输入图像
    Mat inputImage = imread("C:\\Users\\12581\\Desktop\\1\\1.bmp", IMREAD_GRAYSCALE);

    if (inputImage.empty()) {
        std::cerr << "无法读取输入图像" << std::endl;
        return -1;
    }

    // 进行高斯滤波
    Mat gaussianFiltered;
    GaussianBlur(inputImage, gaussianFiltered, Size(5, 5), 0);

    // 进行中值滤波
    Mat medianFiltered;
    medianBlur(inputImage, medianFiltered, 5);

    // 进行均值滤波
    Mat meanFiltered;
    blur(inputImage, meanFiltered, Size(5, 5));

    // 计算输出图像:输入图像减去滤波后的结果
    Mat outputImage1;
    subtract(inputImage, gaussianFiltered, outputImage1);
    Mat outputImage2;
    subtract(inputImage, medianFiltered, outputImage2);
    Mat outputImage3;
    subtract(inputImage, meanFiltered, outputImage3);

    // 显示结果
    imshow("原图", inputImage);
    imshow("高斯模式", outputImage1);
    imshow("均值模式", outputImage2);
    imshow("中值模式", outputImage3);
    waitKey(0);

    return 0;
}

运行结果如下:

原图:

 

处理后:

——————————————————————————————————        

灰阶形态NxM

形态学算子

VisionPro支持一组形态学算子,使您能够增强采集图像中感兴趣的特征或减少不感兴趣的功能。QuickBuild通过One Image Edit Control支持形态学运算符,而VisionPro API支持类CogIPoneImageGreyMography。

腐蚀

侵蚀降低了图像的明亮特征,可以完全去除噪声像素或小缺陷:

 

膨胀 

膨胀可以增强图像的明亮特征,同时抑制较暗的特征:

结构元素 

形态学算子使用结构化元素来处理输入图像。在典型情况下,形态算子使用由3个像素高和3个像素宽的结构化元素定义的边界来检查每个像素及其八个相邻像素的灰度值,如下图所示:

 

在侵蚀操作期间,所有像素的最小值变为输出图像中与结构化元素的中心相对应的像素处的灰度值。膨胀操作采用相反的方法,使用输出图像的最大值。默认情况下,形态运算符使用平面结构元素,该元素不会对输入图像中的原始值进行加法或减法运算。VisionPro支持一组六种不同的平面3x3结构元素,可用于QuickBuild或Dev Studio应用程序:(diagonal:对角线)

 

默认情况下,形态操作符使用3x3正方形结构元素,但可以指定不同的形状。通常,您应该根据您感兴趣的增强或减少特征的形状来选择结构化元素。除了六个受支持的结构化元素外,您还可以选择设计自己的自定义结构化元素并定义不同的形状。您的自定义结构化元素也可以填充-128到127范围内的正值或负值。使用非平面结构元件将改变形态算子执行侵蚀或膨胀的方式。在侵蚀中,从输入图像中的像素减去结构元素中的值,而在膨胀期间将这些值添加到输入图像,如下图所示(使用非平面结构元素进行膨胀运算):

 

 打开和关闭

VisionPro支持将侵蚀和扩张合并为一个步骤的形态学运算符。

打开

打开算子首先对输入图像执行侵蚀,然后对结果执行膨胀,以便生成输出图像。打开图像会删除少量明亮的像素,然后增强剩余的明亮特征:

关闭 

闭合操作首先对输入图像执行膨胀,然后对结果执行侵蚀,以便生成输出图像。关闭图像可以减少或完全去除图像的暗区域:

打开和关闭操作符都倾向于保留大特征的大小和形状,同时影响小特征的大小与形状。

NxM结构元素 

默认的结构化元素的尺寸为3x3,但您也可以使用One Image Edit Control的CogIPOneImageGreyMorphologyNxM将该工具与更大的元素一起使用。使用NxM灰色形态仍然可以指定自定义值的内核,类似于在标准3x3元素中使用自定义结构化元素。默认情况下,此选项处于禁用状态,并且大多数需要灰度形态的视觉应用程序不使用此选项,因此必须通过“一个图像编辑控件”或通过KernelEnabled属性以编程方式显式启用此选项。

输出图像大小

形态学算子生成的输出图像将小于输入图像。通常,在输入图像的每一侧丢失的行和列的数量将等于在结构化元素内的原点的每一侧上的行和列数,不包括原点本身。例如,一个以原点为中心的3x3结构化元素将在所有边上生成一个小一行一列的输出图像,如图:

同理,对于打开和关闭形态操作,输出图像中丢失的行和列加倍,因为这些形态操作中的每一个都包括侵蚀和膨胀。例如,使用前一图中所示的结构化元素的打开或关闭运算符将生成一个输出图像,该输出图像沿顶部缩小两行,沿左侧缩小两列,沿底部缩小四行,沿右侧缩小四列。

 

文档没有涉及到灰阶NxM的dilateminuserode,closeminusoriginal,originalminusopen算子

哟西, 就是这样:

dilate minus erode =膨胀后图像  —   腐蚀后图像
close minus original = 闭运算图像 —  原始图像
original minus open =原始图像 —  开运算图像

其实这些有专门的称呼:梯度运算,礼帽运算和黑帽运算。

梯度运算=膨胀图像  —  腐蚀图像

黑帽运算=闭运算图像  —  原始图像

礼帽运算=原始图像  —  开运算图像
梯度运算的结果是得到轮廓图像。

黑帽操作结果是突出原图像中暗的区域(比如闭运算本身可以填补物体内部的一些黑洞,这些黑洞就可以通过黑帽运算来凸显)。

ps:这里又要注意了,所谓明暗定义还是要和背景色挂钩的,背景色不同,膨胀和腐蚀的效果不一样,开运算和闭运算展示效果也会不一样。(可以看一下我这篇博客前段部分:机器视觉技术与应用实战(Chapter Two-04)-CSDN博客

礼帽运算的结果是提取噪声(因为开运算本身可以去除一些孤立点,细微连接,毛刺等细节,所以这些细节就可以通过顶帽操作来提取出来),通常噪声是灰度值波动大的细微特征。

C++与opencv:

#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
    // 读取输入图像
    Mat inputImage = imread("C:\\Users\\12581\\Desktop\\1\\1.bmp", IMREAD_GRAYSCALE);

    if (inputImage.empty()) {
        std::cerr << "无法读取输入图像" << std::endl;
        return -1;
    }

    // 定义结构元素
    Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));

    // 定义输出图像
    Mat openedImage, closedImage, dilatedImage, erodedImage;

    // 开运算
    morphologyEx(inputImage, openedImage, MORPH_OPEN, kernel);

    // 闭运算
    morphologyEx(inputImage, closedImage, MORPH_CLOSE, kernel);

    // 膨胀
    dilate(inputImage, dilatedImage, kernel);

    // 腐蚀
    erode(inputImage, erodedImage, kernel);
    //梯度运算
    Mat output1;
    subtract(dilatedImage, erodedImage, output1);
    //黑帽运算
    Mat output2;
    subtract(closedImage, inputImage, output2);
    //礼帽运算
    Mat output3;
    subtract(inputImage, openedImage, output3);


    // 保存输出图像
    imshow("原始图像", inputImage);
    imshow("开运算", openedImage);
    imshow("闭运算", closedImage);
    imshow("膨胀", dilatedImage);
    imshow("腐蚀", erodedImage);
    imshow("梯度运算",output1);
    imshow("黑帽运算", output2);
    imshow("礼帽运算", output3);
    waitKey(0);

    return 0;
}


 梯度运算:

黑帽运算:

礼帽运算:

————————————————————————————————————————

为了强调 黑帽运算那里效果,我把图片放大发出来:

 

 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值