圆的低对比度分割

Posted

技术标签:

【中文标题】圆的低对比度分割【英文标题】:Low contrast segmentation of circles 【发布时间】:2014-03-07 17:23:32 【问题描述】:

我在 Matlab 中对这张图片中的圆圈进行分割时遇到了一些问题。对比度差异非常小,图像本身非常嘈杂。我对图像进行了一些处理并增加了对比度差异,但我仍然不知道下一步该怎么做。

我找到了this paper,但我不知道如何使用 DCT 进行背景重建。不过我做了前面的步骤。

调整前的图像:

调整后的图像(使用imfindcircles从整个图中切出内圆):

每个辐条由 3 个圆圈组成,共有 10 个辐条,因此总共 30 个圆圈。


到目前为止我已经尝试过:

clc
clear
im = imread('f8.jpg');
im = mat2gray(im);

im = 1 - im;
s = size(im);

%contrast enhancement method suggested in paper
for x = 1:s(1);
    for y=1:s(2);
        a = max(im(x, :)) / mean(im(x, :));
        a;
        b = max(im(:, y)) / mean(im(:, y));
        b;
        ab = (a+b)/2;
        im(x, y) = im(x, y) * ab;
        im(x, y);
    end 
end

imshow(im);

%bluring

h = fspecial('average', [2,2]);
im= filter2(h, im);

%find circles
[c, r] = imfindcircles(im, [35 50], 'Sensitivity', 0.92, 'Edge', 0.01);

% figure(1) 
% imshow(im)
% hold on
% viscircles(c, r, 'EdgeColor', 'b');
% hold off

% making mask that cuts out the inenr circles

mask = bsxfun(@plus, ((1:256) - c(1,1)).^2, (transpose(1:256) - c(1,2)).^2) < r(1)^2;
mask = im2double(mask);
mask_al

for x=1:256
    for y=1:256
        if mask(x, y) == 1;
            mask(x, y) = im(x, y);
        end
    end
end

总结一下

我需要计算图像上有多少个圆圈可见。

【问题讨论】:

我的代码在这里-paste.org/71029 【参考方案1】:

如果您有一些可用的用户种子输入(即使不可用,您也可以使用 Hough 圆进行种子输入),您可能需要考虑使用 Active Contours:

Kass、Michael、Andrew Witkin 和 Demetri Terzopoulos。 “蛇:主动轮廓模型。” International Journal of Computer Vision 1.4 (1988): 321-331.

【讨论】:

我试过霍夫圆,实际上这就是我得到内部圆的方式。对于较小的,它无法正常工作。我肯定会看看活动轮廓。谢谢回复! 已经有许多可用的snake 实现。 B-snakes 最适合您的问题。先试试吧。【参考方案2】:

使用图像处理工具箱中的 imfindcircles。您也可以尝试使用 activecontour 功能。有关这些的更多信息,请参阅帮助文档。

【讨论】:

以上是关于圆的低对比度分割的主要内容,如果未能解决你的问题,请参考以下文章

基于matlab的低秩结构重构算法仿真实现,对比ALM,IT,APG,ADMM

分割低对比度的深度图像

图像处理MATLAB应用实战系列(九十七)-基于对比度限制自适应直方图均衡化和分水岭变换实现细胞图像分割

Python中如何分割列表进行对比。 我有一个 大列表账号,密码,性别,邮箱,账号2,密码2,性别2,邮箱2

深度学习语义分割网络介绍对比-FCN,SegNet,U-net DeconvNet

计算机视觉基础MATLAB程序绘制空间内的彩色图像像素变化曲面等值线图生成子图像,显示该子图像的直方图与茎干图子图像进行自适应阈值分割和对比度拉伸,彩色图像处理