【问题标题】:Extraction of sunken portions from image in hieroglyphics从象形文字图像中提取凹陷部分
【发布时间】:2019-06-14 03:30:15
【问题描述】:

目前我正在尝试从像这样的图像中提取象形文字符号。

我所做的是使用霍夫变换来查找线条并将图像分成几部分以使我更容易。但是我尝试了一套算法来从图像中提取凹陷的字母,我走到了死胡同..

我尝试过的是形态学运算、边缘检测和轮廓查找的混合。 那么是否有任何算法设计来做这样的事情或任何提示将不胜感激。

【问题讨论】:

  • 如果您使用适当的照明或 3D 成像技术,生活会变得更轻松
  • @Piglet,最终产品是移动应用,所以我无法控制这些因素。
  • 大多数最新手机都配备了双后置摄像头,可能会为您提供可能有帮助的视差图。只是一个建议。您可以添加更多示例图像吗?

标签: opencv image-processing


【解决方案1】:

您可以对输入图像进行上采样,应用一些平滑处理,并找到 Otsu 阈值,然后使用不同的窗口大小 use this threshold to find Canny edges

对于较大的窗口 (5 x 5),您会得到一个包含几乎所有您需要的边缘以及噪声的嘈杂图像。

对于较小的窗口 (3 x 3),您会得到噪点较少的图像,但缺少一些边缘。

如果这张噪声较小的图像不够好,您可以尝试使用噪声图像作为掩码对其进行形态重建。在这里,我使用形态学命中-未命中变换链接了噪声图像中的一些对角线边缘段,然后应用了重建。

使用

Mat k = (Mat_<int>(3, 3) <<
        0, 0, 1,
        0, -1, 0,
        1, 0, 0);

用于连接断边的内核,您会得到更细的轮廓。

请注意,在下面的c++ 代码中,我使用了简单的重构。

Mat im = imread("rsSUY.png", 0);
/* up sample and smooth */
pyrUp(im, im);
GaussianBlur(im, im, Size(5, 5), 5);
/* find the Otsu threshold */
Mat bw1, bw2;
double th = threshold(im, bw1, 0, 255, THRESH_BINARY | THRESH_OTSU);
/* use the found Otsu threshold for Canny */
Canny(im, bw1, th, th/2, 5, true);  /* this result would be noisy */
Canny(im, bw2, th, th/2, 3, true);  /* this result would be less noisy */

/* link broken edges in more noisy image using hit-miss transform */
Mat k = (Mat_<int>(3, 3) <<
    0, 0, 1,
    0, -1, 0,
    0, 0, 0);
Mat hitmiss;
morphologyEx(bw1, hitmiss, MORPH_HITMISS, k);
bw1 |= hitmiss;

/* apply morphological reconstruction to less noisy image using the modified noisy image */
Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3));
double prevMu = 0;
Mat recons = bw2.clone();
for (int i = 0; i < 200; i++)
{
    dilate(recons, recons, kernel);
    recons &= bw1;
    Scalar mu = mean(recons);
    if (abs(mu.val[0] - prevMu) < 0.001)
    {
        break;
    }
    prevMu = mu.val[0];
}

imshow("less noisy", bw2);
imshow("reconstructed", recons);

waitKey();

【讨论】:

    【解决方案2】:

    这项任务的最佳选择是机器学习。你可以:

    1. 为每个字母裁剪或标记几个样本
    2. 使用这些样本训练 SSD(单次多盒检测器)

    优点是您将能够一次检测图像中的所有字母。

    【讨论】:

      【解决方案3】:

      我有一个相当简单但不是那么完美的解决方案。

      1。根据图像绿色通道的中值寻找最优上下阈值

      上阈值图像:

      下阈值图像:

      2。将两张图像相减,然后进行中值滤波:

      3。 Canny 边缘检测:

      为了获得更好的完成,您需要通过一些形态学操作来跟进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 2016-04-23
        • 2014-06-04
        • 2015-11-03
        • 2020-02-21
        相关资源
        最近更新 更多