【发布时间】:2016-07-22 03:18:49
【问题描述】:
我有如下图像,我想使用 PET 包的霍夫变换检测图像中的线条。我需要帮助来了解如何从该图像中获取线条。
library("PET", lib.loc="~/R/win-library/3.1")
library("raster", lib.loc="~/R/win-library/3.1")
p=matrix(diag(100), 100)
library(raster)
r <- raster(p)
plot(r)
abc=hough(p)
viewData(list(p, abc$hData), list("Phantom", "Hough transformed phantom"))
我如上所述应用了霍夫变换。我运行最后一行后得到的原始图像和图像如下
关于如何获取线的坐标(来自原始图像)的任何输入?我知道第二个图像右侧窗格中的白点代表这条线。该线是使用极坐标系绘制的。但我不知道如何使用第二张图像来获取原线的坐标
我查看了 PET 包的文档,但发现很难理解 :( 我运行了他们的示例代码,但我不明白
================================================ ================================
我按照用户 NiceE 在 cmets 中给出的建议更新了我的代码,如下所示
library("PET", lib.loc="~/R/win-library/3.1")
library("raster", lib.loc="~/R/win-library/3.1")
#p=matrix(diag(1000), 1000)
p=matrix(rep(0,10000), 100, 100)
# for (i in 1:100)
# {p[i,100-i+1]=1
# }
for (i in 1:100)
{p[i,50]=1
}
# library(raster)
# r <- raster(p)
# plot(r)
abc=hough(p)
maxPoint<-which(abc$hData==max(abc$hData),arr.ind=T)
library(pracma)
a<-cot(maxPoint[1,"row"]*pi/180)
b<-maxPoint[1,"col"]/sin(maxPoint[1,"row"]*pi/180)
a
b
par(pty="s")
par(mfrow=c(1,2))
#image(r, main="org")
image(p,main="original")
image(abc$hData, main="Houghmatrix")
a 和 b 的新值是否正确?我觉得 b 应该是 50(原线与 (0,0) 的垂直距离)。我做错了什么?
我也想知道为什么 abc$hData 有 181 行和 143 列。我可以想象 181 行与 PI 弧度是 180 度有关。但我对 143 列一无所知...
================================================ ========================= 更新 2 如果我更新我的原始矩阵,因为我觉得我得到了奇怪的答案。我得到 a=-57.6 和 b=1786.12。
p=matrix(rep(0,10000), 100, 100)
for (i in 1:100)
{p[80,i]=1
}
【问题讨论】:
-
我没有看到他们处理 R 矩阵对象的任何样本。为什么不尝试使用软件包的读取工具来读取图像格式。
-
我查看了 PET 包装文档并查看了第 4 页/霍夫部分。它表示输入参数 oData (matrix) 是一个包含图像的矩阵(用于霍夫变换)。
标签: r hough-transform