标签: edge-detection

检测圆圈并测量像素

在此输入图像描述

在此图像中,我需要检测车辆轮辋并通过图像处理测量轮辋的像素长度.我想我应该遵循循环Hough变换的圆圈.你能告诉我哪些步骤可以获得轮辋的宽度?ex(灰度 - >边缘检测,或对此的任何其他评论)

image-processing edge-detection grayscale hough-transform threshold

2
推荐指数
1
解决办法
1858
查看次数

最快的Sobel边缘检测C#

我想制作一个实现sobel边缘检测的程序.这是我的代码:

private Bitmap SobelEdgeDetect(Bitmap ori)
{
        Bitmap b = original;
        Bitmap bb = original;
        int width = b.Width;
        int height = b.Height;
        int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } };
        int[,] gy = new int[,] { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } };

        int[,] allPixR = new int[width, height];
        int[,] allPixG = new int[width, height];
        int[,] allPixB …
Run Code Online (Sandbox Code Playgroud)

c# graphics image-processing edge-detection

2
推荐指数
1
解决办法
2万
查看次数

索贝尔过滤后如何消除噪音?

我的问题很简单.我对中值滤波的灰度图像进行了Sobel滤波.索贝尔滤波后的图像是

纹理地板中的矩形物体]![纹理地板中的矩形物体]

矩形物体是我感兴趣的.我试图从图像中提取它.

如您所见,与物体一起,由于地板的纹理,会产生更多噪音.因此,边缘图像如下(具有更多的假边缘)

在此输入图像描述

索贝尔过滤后如何消除噪音?或者我如何克服这个障碍?

您的建议或指导将帮助我理解图像处理及其挑战.

谢谢

opencv edge-detection image-segmentation

2
推荐指数
1
解决办法
3100
查看次数

在MATLAB中提供了简单的边缘检测

我有以下图片: 而且我想要检测一下直观易读的音符轮廓,但是当我尝试这样做时,它实际上并不那么容易.

为了快速原型设计,我首先开始使用MATLAB(但后来我想在Java中使用它,因此我不想在MATLAB中使用太多特殊算法,而是尝试使用基本图像处理算法(prewitt/sobel/canny/adaptive阈值)/hough trafo)也很容易用另一种语言(例如opencv等).

最容易开始的代码是(但我认为这应该已经非常好了,因为与内部边缘相比,外边缘看起来很强):

I = double(rgb2gray(imread('img.jpg')));
bw = edge(I, 'canny');
imshow(bw)
Run Code Online (Sandbox Code Playgroud)

我认为在使用自动模式时,matlab会很好地选择canny过滤器中的阈值.但实际上并没有:http://i.imgur.com/LeKPgso.png

当手动将阈值设置为标量(至.4例如)时,我仍然会得到太多的内部文本渐变,外部边界已经过于不完整/不完整:http://i.imgur.com/p68CVIU.png

我尝试使用prewitt过滤器(在x和y方向):

I = double(rgb2gray(imread('img.jpg')));
f1 = double(fspecial('prewitt'));
x = conv2(I, f);
y = conv2(I, f');
bw = (x.^2+y.^2).^0.5;
colormap(gray(256))
imagesc(bw);
Run Code Online (Sandbox Code Playgroud)

导致:http://i.imgur.com/Jd9Fqpn.png所以也不是很好......它看起来更好但外面仍然非常零散:(

任何想法如何改善它?此外,我想稍后将图像取消扭曲为矩形.关于如何做的任何想法?霍夫变换不适用于像上图那样的非直线轮廓,因为它会产生直线...

非常感谢!

编辑:好的,我发现斑驳的外观来自MATLAB ...当放大时,它会好得多,而且不那么斑驳,请参阅:http://i.imgur.com/UrPd8me.png 我可以想象找到通过缩小外轮廓来获得轮廓,因为在这种情况下它是全黑的(某种边界框).但我不想假设因为图片并不总是用手电筒拍摄,例如:http://i.imgur.com/nfqygmA.jpg 那么外面区域会有一些噪音......

Edit2:刚发现算法检测照片的纸张角落显然看起来不太容易.:)也许你有一些新的想法开始.

algorithm matlab opencv image-processing edge-detection

2
推荐指数
1
解决办法
587
查看次数

2D numpy数组 - 检查所有相邻项是否相等

我开始使用nxm布尔数组,它定义region-如果它在区域中则为true,否则为false.例如:

r = np.array([[ 0,  0,  1,  1,  1],
              [ 0,  1,  1,  0,  0],
              [ 0,  1,  1,  1,  0],
              [ 1,  1,  1,  0,  0],
              [ 1,  1,  0,  0,  0]])
Run Code Online (Sandbox Code Playgroud)

区域之间的线可以定义为n-1 x m-1阵列,它表示每组四个值之间的"点".如果所有4个周围值都相同,则您不在区域之间的边缘.如果4个值中的任何一个不同,那么你就是.对于以上r:

l = np.array([[ 1, 1, 1, 1],
              [ 1, 0, 1, 1],
              [ 1, 0, 1, 1],
              [ 0, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

有关如何有效地完成这项工作的任何想法?我试过在两个方向做一个差异,但这个加倍.有2D差异功能吗?其他一些方法吗?

python arrays numpy transformation edge-detection

2
推荐指数
1
解决办法
1046
查看次数

Canny算法中的非最大抑制:使用SSE进行优化

我有"荣幸"来改善其他人的以下代码的运行时间.(这是来自canny - 算法的非最大限制).我的第一个想法是使用SSE内在代码,我在这方面很新,所以我的问题是.

有没有机会这样做?如果是这样,有人可以给我一些提示吗?

void vNonMaximumSupression(
          float* fpDst, 
          float const*const fpMagnitude, 
          unsigned char  const*const ucpGradient,                                                                           ///< [in] 0 -> 0°, 1 -> 45°, 2 -> 90°, 3 -> 135°
int iXCount, 
int iXOffset, 
int iYCount, 
int ignoreX, 
int ignoreY)
{
    memset(fpDst, 0, sizeof(fpDst[0]) * iXCount * iXOffset);

    for (int y = ignoreY; y < iYCount - ignoreY; ++y)
    {
        for (int x = ignoreX; x < iXCount - ignoreX; ++x)
        {
            int idx = iXOffset * y + x;
            unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ sse computer-vision edge-detection canny-operator

2
推荐指数
1
解决办法
843
查看次数

VHDL中信号的边缘检测

我是VHDL的新手,我有一个按钮,我想在按下按钮时检测它的信号,这意味着我想在按下按钮时检测它的上升沿吗?

我进行了研究,发现的所有内容都与检测clk的上升沿有关。

我的问题是,当按下按钮时,按钮的信号将变为1并保持为1,直到发生另一个信号为止,所以当按钮的信号升高时,我会更感兴趣吗?

vhdl edge-detection

2
推荐指数
1
解决办法
3844
查看次数

使用Hough变换OpenCV Android进行矩形文档检测

我正在尝试使用opencv 4 android sdk检测矩形文档。首先我试图通过找到轮廓来检测它,但是它不能用于多彩色文档。您可以检查此链接以获得更好的主意: 使用OpenCV4Android检测多彩色文档

我进行了很多研究,发现可以使用houghline变换来完成它,因此我遵循以下方法来检测文档:

原始图像-> cvtColor->高斯模糊滤波器->对其进行扩张以锐化边缘->应用分水岭图像分割算法->具有动态otsu阈值的canny边缘检测->然后应用霍夫线变换

我为霍夫线变换所做的是:

Imgproc.HoughLinesP(watershedMat, lines, 1, Math.PI / 180, 50, 100, 50);

    List<Line> horizontals = new ArrayList<>();
    List<Line> verticals = new ArrayList<>();
    for (int x = 0; x < lines.rows(); x++)
    {
        double[] vec = lines.get(x, 0);
        double x1 = vec[0],
                y1 = vec[1],
                x2 = vec[2],
                y2 = vec[3];
        Point start = new Point(x1, y1);
        Point end = new Point(x2, y2);
        Line line = new Line(start, end);
        if (Math.abs(x1 - x2) > Math.abs(y1-y2)) …
Run Code Online (Sandbox Code Playgroud)

opencv edge-detection hough-transform opencv4android houghlinesp

2
推荐指数
1
解决办法
2229
查看次数

检测图像的边缘在Matlab中不起作用

我正在研究检测图像边缘的脚本.

这是脚本:

clear all; close all; clc;

c = rgb2gray(imread('image_S004_I0004.jpg'));
c = double(c);
k = imnoise(c, 'salt & pepper', 0.01); 

gg = [-1 0 1;-2 0 2; -1 0 1];
gh = gg';

grad_g = conv2(k, gg);
grad_h = conv2(k, gh);
grad = sqrt(grad_g.^2 + grad_h.^2);

[r s] = size(grad);
T = 80;
for ii = 1:r
    for jj = 1:s

        if grad(ii, jj) < T
            thresh_grad(ii, jj) = 0;
        else 
            thresh_grad(ii, jj) = 1;
        end
    end
end

figure()
subplot(121); …
Run Code Online (Sandbox Code Playgroud)

matlab image-processing noise edge-detection sobel

2
推荐指数
1
解决办法
72
查看次数

过滤后如何处理负像素值?

我有一个8位图像,我想用一个矩阵对它进行过滤以进行边缘检测。我的内核矩阵是

0  1  0
1 -4  1
0  1  0
Run Code Online (Sandbox Code Playgroud)

对于某些指数,它给了我负值。我应该和他们一起做什么?

image-processing convolution edge-detection imagefilter

2
推荐指数
1
解决办法
1365
查看次数