我正在寻找一种好的算法,可以从一组多边形数据中获得独特的边缘.在这种情况下,多边形由两个数组定义.一个数组是每个多边形的点数,另一个数组是顶点索引列表.
我有一个正在运行的版本,但是当达到超过500,000的多边形时性能会变慢.我的版本遍历每个面,并将每个边的排序顶点添加到stl :: set.我的数据集主要是三角形和四边形多边形,大多数边将被共享.
有更聪明的算法吗?
我正在尝试编写脊检测算法,我发现的所有信号源似乎都将边缘检测与脊检测混为一谈.现在,我已经实现了Canny边缘检测算法,但它不是我想要的:例如,在图像中给定一条线,它将有效地将其转换为双线边缘(因为它将记录两边的边缘)这条线) - 我只想让它读一行.
关于山脊检测的维基百科文章有一堆数学,但这种情况对我作为一个程序员没有帮助(不是我不喜欢数学,但它不是我的领域,我不明白如何翻译他们的微分方程代码).实际实现这个有一个很好的来源吗?或者,就此而言,是否有一个良好的开源实现?
编辑:这是一个简单的例子.我们从一个简单的行开始:
http://img24.imageshack.us/img24/8112/linez.th.png
并运行Canny算法来获得:
http://img12.imageshack.us/img12/1317/canny.th.png
(你可以看到它在这里更厚 - 如果你点击图像,你会发现它实际上是两条相邻的线,中间有一个空白)
另外,我用C++编写,但这并不重要.但我想编写算法代码,而不仅仅是编写SomePackage::findRidges()并完成它.
当用户在网络摄像头前面时,我正在寻找用户头部的边缘.我试过谷歌搜索但无济于事.有人能指出我的一些ActionScript示例吗?
和平\ m /
flash image-processing actionscript-3 face-detection edge-detection
在应用canny边缘检测后的openCV中,我想进一步处理结果(仅显示水平线,删除短线等).但是canny的结果只是另一个形象.我想获得一系列描述检测到边缘的线条
我知道着名的Hough Line变换,但结果并不总是好的,这就是为什么我想手动处理canny结果.输入:

仅输出canny:

输出canny然后Hough线变换

这是用于检测楼梯边缘的霍夫线变换结果(红线).尽管canny边缘检测到边缘,但未正确检测到下方的第4行.
知道如何从canny图像中提取边缘吗?
我有一个Canny边缘检测到的球的图像(见下面的链接),其中包含许多嘈杂的边缘.什么是最好的图像处理技术,我可以用来删除这些嘈杂的边缘而不删除属于球的边缘?
原始图像

Canny边缘图像

非常感谢大家的帮助和建议,非常感谢!
Ps我试图在使用Circle Hough Transform来检测球之前清理边缘图像.
我正在尝试制作一个计算机视觉程序,它可以在嘈杂的背景(如沙滩)中检测垃圾和随机垃圾.
原始图片:
没有任何图像处理的Canny边缘检测:
我意识到图像处理技术的某种组合将帮助我实现忽略嘈杂的沙质背景并检测地面上所有垃圾和物体的目标.
我尝试预先形成中位数模糊,玩转并调整参数,它给了我这个:
它在忽略沙质背景方面表现良好,但它无法检测到地面上的其他许多物体,可能是因为它模糊了(不太确定).
有没有办法改进我的算法或图像处理技术,忽略嘈杂的沙质背景,同时允许精确边缘检测找到所有对象,让程序检测并绘制所有对象的轮廓.
码:
from pyimagesearch.transform import four_point_transform
from matplotlib import pyplot as plt
import numpy as np
import cv2
import imutils
im = cv2.imread('images/beach_trash_3.jpg')
#cv2.imshow('Original', im)
# Histogram equalization to improve contrast
###
#im = np.fliplr(im)
im = imutils.resize(im, height = 500)
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# Contour detection
#ret,thresh = cv2.threshold(imgray,127,255,0)
#imgray = cv2.GaussianBlur(imgray, (5, 5), 200)
imgray = cv2.medianBlur(imgray, 11)
cv2.imshow('Blurred', imgray)
'''
hist,bins = np.histogram(imgray.flatten(),256,[0,256])
plt_one = plt.figure(1)
cdf = hist.cumsum()
cdf_normalized = …Run Code Online (Sandbox Code Playgroud) opencv image-processing computer-vision edge-detection opencv-contour
到目前为止我的代码是:
function imgg = derichefilter1(x, k, a, b, c)
osize = size(x);
x = double(x);
a = double(a);
b = double(b);
c = double(c);
k = double(k);
y1 = zeros(osize(1),osize(2));
y2 = zeros(osize(1),osize(2));
y1(:,1) = a(1)*x(:,1);
y1(:,2) = a(1)*x(:,2) + a(2)*x(:,1) + b(1)*y1(:,1);
for ii=3:osize(2)
y1(:,ii) = a(1)*x(:,ii) + a(2)*x(:,ii-1) + b(1)*y1(:,ii-1) + b(2)*y1(:,ii-2);
end
y2(:,osize(2)-1) = a(3)*x(osize(2));
for ii=(osize(2)-2):-1:1
y2(:,ii) = a(3)*x(:,ii+1) + a(4)*x(:,ii+2) + b(1)*y2(:,ii+1) + b(2)*y2(:,ii+2);
end
imgg = c*(y1+y2);
function imgg = derichefilter2(x, k, a, b, …Run Code Online (Sandbox Code Playgroud) 我目前正在撰写一篇关于新隐写算法的研究论文.我在算法的某些方面使用了canny边缘检测器.在本文中,我需要编写新方法的时间复杂度,这又取决于canny边缘检测器的时间复杂度.
问题是网络上没有任何地方我可以找到关于canny的时间复杂性的任何参考.我甚至读过原始的精装纸.我无法正确推断它并需要一些帮助.
我想比较网络应用程序的不同版本(同一站点)的屏幕截图。到目前为止,我尝试了以下方法:
对于后者,我将屏幕截图细分为相同大小的不同部分,并通过颜色直方图进行比较。
现在我想以更智能的方式细分图像。也许我可以把它分成一些感兴趣的区域。有人可以解释一些方法吗?
这是我的问题的一个例子:

image image-processing computer-vision edge-detection image-segmentation
我有一个盒子的图像.我正在尝试检测角落并从圆圈标记这些角落.我使用以下代码:
import cv2
import numpy as np
img_file = 'Image.jpg'
img = cv2.imread(img_file, cv2.IMREAD_COLOR)
imgDim = img.shape
dimA = imgDim[0]
dimB = imgDim[1]
# RGB to Gray scale conversion
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
# Noise removal with iterative bilateral filter(removes noise while preserving edges)
noise_removal = cv2.bilateralFilter(img_gray,9,75,75)
# Thresholding the image
ret,thresh_image = cv2.threshold(noise_removal,220,255,cv2.THRESH_OTSU)
th = cv2.adaptiveThreshold(noise_removal, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
# Applying Canny Edge detection
canny_image = cv2.Canny(th,250,255)
canny_image = cv2.convertScaleAbs(canny_image)
# dilation to strengthen the edges
kernel = …Run Code Online (Sandbox Code Playgroud)