如何比较两个图像并识别图像中的图案,无论其大小和图案大小如何,并使用.Net C#?此外,从图像处理中使用哪些算法?
c# pattern-recognition image-processing feature-extraction computer-vision
我发现这段代码可以获得一个镂空图像.我有一张圆圈图片(https://docs.google.com/file/d/0ByS6Z5WRz-h2RXdzVGtXUTlPSGc/edit?usp=sharing).
img = cv2.imread(nomeimg,0)
size = np.size(img)
skel = np.zeros(img.shape,np.uint8)
ret,img = cv2.threshold(img,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
done = False
while( not done):
eroded = cv2.erode(img,element)
temp = cv2.dilate(eroded,element)
temp = cv2.subtract(img,temp)
skel = cv2.bitwise_or(skel,temp)
img = eroded.copy()
zeros = size - cv2.countNonZero(img)
if zeros==size:
done = True
print("skel")
print(skel)
cv2.imshow("skel",skel)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)
问题是图像结果不是"骨架"而是一组点!我的目的是在我对图像进行镂空后提取轮廓周长.如何编辑我的代码来解决它?使用cv2.findContours找到骨架圆是正确的吗?
我正在开发一个项目,我需要使用opencv检测图像上的功能.
我在用
SURF detector;
SURF extractor;
BFMatcher matcher;
Run Code Online (Sandbox Code Playgroud)
用于检测,提取和匹配点.它适用于某些图像,但在其他图像上失败.
例如,系统在此映像上失败:
显然,此图像具有一些纹理,并且特征检测器应检测它们,但未检测到任何特征,因此不会生成匹配.
如何改进此功能检测?
我可以使用任何图像处理技术吗?
我可以使用哪种其他探测器来帮助解决这个问题?
c++ opencv image-processing feature-extraction feature-detection
我在opencv中使用BOW来聚类可变大小的功能.但是有一件事从opencv的文档中不清楚,我也无法找到这个问题的原因:
假设:字典大小= 100.
我使用surf来计算特征,每个图像都有可变大小的描述符,例如:128 x 34,128 x 63等.现在在BOW中,每个都是聚类的,我得到一个固定的描述符大小为128 x 100的图像.我知道100是使用kmeans聚类创建的集群中心.
但我感到困惑的是,如果图像有128 x 63个描述符,那么它将如何聚类成100个聚类,这是不可能使用kmeans,除非我将描述符矩阵转换为1D.转换为1D会丢失单个关键点的有效128维信息吗?
我需要知道如何操纵描述符矩阵以从仅63个特征中获得100个cluter中心.
我正在尝试使用scikit-learn的伯努利朴素贝叶斯分类器.我使用CountVectorizor让分类器在一个小数据集上正常工作,但是当我尝试使用HashingVectorizor处理更大的数据集时遇到了麻烦.保持所有其它参数(培训文档,测试文档,分类和特征提取设置)不变,并从CountVectorizor只是切换到HashingVectorizor引起了我的分类总是吐出的所有文件相同的标签.
我编写了以下脚本来研究两个特征提取器之间的区别:
from sklearn.feature_extraction.text import HashingVectorizer, CountVectorizer
cv = CountVectorizer(binary=True, decode_error='ignore')
h = HashingVectorizer(binary=True, decode_error='ignore')
with open('moby_dick.txt') as fp:
doc = fp.read()
cv_result = cv.fit_transform([doc])
h_result = h.transform([doc])
print cv_result
print repr(cv_result)
print h_result
print repr(h_result)
Run Code Online (Sandbox Code Playgroud)
(其中'moby_dick.txt'是项目gutenberg的moby dick副本)
(简明)结果:
(0, 17319) 1
(0, 17320) 1
(0, 17321) 1
<1x17322 sparse matrix of type '<type 'numpy.int64'>'
with 17322 stored elements in Compressed Sparse Column format>
(0, 1048456) 0.00763203138591
(0, 1048503) 0.00763203138591
(0, 1048519) 0.00763203138591
<1x1048576 sparse matrix of type '<type 'numpy.float64'>' …Run Code Online (Sandbox Code Playgroud) 我想计算几个纹理特征(即:小/大数字强调、数字非均匀性、二阶矩和熵)。这些可以从相邻灰度级依赖矩阵计算出来。我正在努力理解/实现这一点。关于这种方法的信息很少(公开可用)。
根据这篇论文:
该矩阵采用二维数组Q 的形式,其中Q(i,j)可以被视为已处理图像灰度变化的频率计数。它与图像的直方图具有相似的含义。该数组为 N g ×N r,其中 N g是可能的灰度级数,N r是图像中像素的可能邻居数。
如果图像函数F(I,J)是离散的,则很容易计算机的Q矩阵(对于正整数d,一)通过在计数的次数每个元素之间的差F(I,J)和其在特定距离d处,邻居等于或小于a。
这是同一篇论文中的示例(d = 1, a = 0):
输入(图像)矩阵和输出矩阵Q:

我已经看了这个例子好几个小时了,但仍然无法弄清楚他们是如何得到Q矩阵的。任何人?
该方法最初由 C. Sun 和 W. Wee 创建,并在一篇名为“纹理分类的相邻灰度依赖矩阵”的论文中进行了描述,我可以访问,但无法下载(按下载后页面重新加载和就是这样)。
Hilbert空间/平面填充曲线是否有任何扩展,将非正方形表面映射到矢量/线[用于图像映射到矢量]?
我目前正在使用'InfoGainAttributeEval'进行功能选择.我想知道该方法会发生什么.我找到了以下内容.
通过测量关于类的信息增益来评估属性的价值.
InfoGain(Class,Attribute)= H(Class) - H(Class | Attribute).
由于我是这个领域的新手,我不明白它是什么.有人可以解释一下它是如何工作的吗?:)与'GainRationAttributeEval'有什么区别?
我正在使用from sklearn.decomposition import PCA library, IncrementalPCA来降低我的问题的维度,如下所示:
training_data = [...]
training_target = [...]
test_data = [...]
test_target = [...]
ipca = IncrementalPCA(n_components, batch_size)
new_training_data = ipca.fit_transform(training_data)
Run Code Online (Sandbox Code Playgroud)
要使用给定的分类器运行测试,我需要使用在训练集中获得的信息(如特征值和特征向量)来拟合测试集,以减少新训练集的相同大小。但是我怎么能用这个库(或其他库)来做到这一点,因为ipca.fit_transform(data)它不会向我返回任何东西,比如 eigpairs 或一些值来调整测试集的维度?
尝试将字符串转换为数字矢量,
### Clean the string
def names_to_words(names):
print('a')
words = re.sub("[^a-zA-Z]"," ",names).lower().split()
print('b')
return words
### Vectorization
def Vectorizer():
Vectorizer= CountVectorizer(
analyzer = "word",
tokenizer = None,
preprocessor = None,
stop_words = None,
max_features = 5000)
return Vectorizer
### Test a string
s = 'abc...'
r = names_to_words(s)
feature = Vectorizer().fit_transform(r).toarray()
Run Code Online (Sandbox Code Playgroud)
但是当我陶醉时:
['g', 'o', 'm', 'd']
Run Code Online (Sandbox Code Playgroud)
有错误:
ValueError: empty vocabulary; perhaps the documents only contain stop words
Run Code Online (Sandbox Code Playgroud)
这样的单字母字符串似乎存在问题。我该怎么办?谢谢