gpt4 book ai didi

c++ - 低对比度图像分割

转载 作者:IT老高 更新时间:2023-10-28 22:38:09 32 4
gpt4 key购买 nike

我遇到了低对比度图像分割的问题。任务是发现表面缺陷。它们是可见的(缺陷总是暗区),但图像的对比度非常低。下面是两个示例。

1 2

我尝试过增强对比度,然后设置阈值:

Mat tmp1 = imread("C:\\framesRoi\\311.bmp",0);
stretchContrast(tmp1);
threshold(tmp1,tmp1,75,255,THRESH_BINARY);

其中拉伸(stretch)对比 impl:

int minValue = 255, maxValue = 0;
const int l = sourceImg.cols * sourceImg.rows * sourceImg.channels();
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; ++i)
{
if(ptr[i] < minValue)
{
minValue = ptr[i];
}
if(ptr[i] > maxValue)
{
maxValue = ptr[i];
}
}
}
cout<<"min: "<<minValue<<";"<<"max value: "<<maxValue<<endl;

const int magicThreshold = 10;
if(sourceImg.isContinuous())
{
uchar* ptr = sourceImg.ptr<uchar>(0);
for(int i = 0; i < l; ++i)
{
ptr[i] = 255 * (ptr[i]-minValue)/(maxValue - minValue);
}
}

但是这种方法失败了。有许多错误检测,并非所有缺陷都被检测到: 3

这是带有测试帧的 zip:https://dl.dropboxusercontent.com/u/47015140/testFrames.rar

最佳答案

尝试使用 kmeans 等聚类方法按灰度级对图像进行聚类。下面我直接在图像上使用了 kmeans,没有任何灰度转换(使用 3 个集群给了我更好的结果)。您应该能够通过使用评论中概述的方法对预处理图像进行聚类来改进结果。

enter image description here enter image description here

由于 kmeans 的随机性,簇的形状可能会略有不同。

现在,如果您获取聚类图像的连通分量并计算这些区域的平均灰度级,则缺陷的平均值应该低于其他区域。

我在 Matlab 中做了聚类部分。

im = imread('r2SOV.png');%Uy1Fq r2SOV
gr = im;
size = size(gr);

% perform closing using a 5x5 circular structuring element
sel = strel('disk', 2, 4);
mcl = imclose(gr, sel);
% cluster gray levels using kmeans: using 3 clusters
x = double(mcl(:));
idx = kmeans(x, 3);
cl = reshape(idx, size);

figure, imshow(label2rgb(cl))

关于c++ - 低对比度图像分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281884/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com