- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用卷积进行边缘检测。我想我需要在卷积后对图像进行归一化。
我正在使用此处指定的卷积矩阵:
https://en.wikipedia.org/wiki/Kernel_(image_processing)#Convolution
附件是一些r代码,以及源和输出图像......
require(jpeg)
myjpg <- readJPEG("mtg.jpg")
grayImg <- myjpg[,,1]+myjpg[,,2]+myjpg[,,3] # reduce to gray
grayImg <- grayImg/max(grayImg) # normalize
dim(grayImg)
convolve <- function(img, f){
newimg <- img
radius <- as.integer(nrow(f)/2)+1
print(radius)
for(i in c(1:nrow(img))){
for(j in c(1:ncol(img))){
f_sub <- f[c(max(1,radius-i+1):min(nrow(f),nrow(img)-i+radius)),c(max(1,radius-j+1):min(ncol(f),ncol(img)-j+radius))]
img_sub <- img[c(max(1,i-radius+1):min(nrow(img),i+radius-1)),c(max(1,j-radius+1):min(ncol(img),j+radius-1))]
wavg <- sum(as.vector(f_sub)*as.vector(img_sub))# / sum(as.vector(f_sub)) # todo, not sure about this division
newimg[i,j] <- wavg
}
}
return(newimg)
}
edgeFilter <- matrix(c(-1,-1,-1,-1,8,-1,-1,-1,-1), ncol = 3)
outimg <- convolve(grayImg,edgeFilter)
outimg <- outimg - min(outimg)
outimg <- outimg/max(outimg)
plot(c(0,1),c(0,1),t='n')
rasterImage(outimg, 0,0,1,1)
最佳答案
你的可视化是完全正常的。发生的情况是您正在重新映射像素值,以便将最低强度设置为 0,将最高强度设置为 1。所有其他值都被线性重新映射以符合 [0,1]
范围。您可能只看到黑白的原因是由于剪辑 .发布这些结果的用户可能已经截断了动态范围,其中任何小于 0 的值都设置为 0,任何大于 1 的值(或您正在查看的数据类型的最大值)是设置为 1。
您正在计算内核/掩码具有负系数的边缘检测,因此您完全有可能在结果中同时获得负值和正值。以这种方式重新缩放图像,您会看到 0 的值被映射到灰色(大约 0.5 左右),因为最小的负强度被拉到 0,这自然意味着您的 0 值被拉到一些非零数。同样,那些非常大的值被归一化为 1。
但是,在执行标准化时, 是标准做法。规范化内核 .原因是这样做可以确保每个像素的输出值永远不会超出数据类型的动态范围。通过对内核进行归一化,您可以确保所有系数的权重在 [0,1]
之间。并且内核的总和为 1。通过这样做,您可以确保您永远不必检查输出并在必要时裁剪值。这也确保您不需要除以卷积代码中每个像素的权重总和,因为内核标准化步骤已经处理了该标准化。您只需标准化一次。但是,当内核中有负系数时,这是一件棘手的事情。如果存在负系数,则很少进行归一化……至少我在实践中看到的。
现在,回到“黑白”的东西,如果你使用另一个过滤器......比如说......一个平均过滤器,你肯定会得到一个“黑白”图片,因为没有任何值是负面的.... 即使将输出标准化为 [0,1]
通过最小-最大方法。请记住,这将执行 对比拉伸(stretch) 如果您的强度集中在 [0,1]
的一小部分范围内,输出将拉伸(stretch),使最低强度下降到 0,最大强度映射到 1。
我已经修改了你的代码来做到这一点。请记住,我找不到没有轴线的原始图像,所以我拍了一张快照并将其保存为 PNG。因此,我使用了 png
包而不是 jpeg
包裹:
require(png) # Change
myjpg <- readPNG("mtg.png") # Change
grayImg <- myjpg[,,1]+myjpg[,,2]+myjpg[,,3] # reduce to gray
grayImg <- grayImg/max(grayImg) # normalize
dim(grayImg)
convolve <- function(img, f){
newimg <- img
radius <- as.integer(nrow(f)/2)+1
print(radius)
for(i in c(1:nrow(img))){
for(j in c(1:ncol(img))){
f_sub <- f[c(max(1,radius-i+1):min(nrow(f),nrow(img)-i+radius)),c(max(1,radius-j+1):min(ncol(f),ncol(img)-j+radius))]
img_sub <- img[c(max(1,i-radius+1):min(nrow(img),i+radius-1)),c(max(1,j-radius+1):min(ncol(img),j+radius-1))]
wavg <- sum(as.vector(f_sub)*as.vector(img_sub))# / sum(as.vector(f_sub)) # todo, not sure about this division
newimg[i,j] <- wavg
}
}
return(newimg)
}
#edgeFilter <- matrix(c(-1,-1,-1,-1,8,-1,-1,-1,-1), ncol = 3)
averageFilter <- matrix(c(1,1,1,1,1,1,1,1,1), ncol=3) / 9# Change
#outimg <- convolve(grayImg,edgeFilter) # Change
outimg <- convolve(grayImg,averageFilter)
outimg <- outimg - min(outimg)
outimg <- outimg/max(outimg)
plot(c(0,1),c(0,1),t='n')
rasterImage(outimg, 0,0,1,1)
averageFilter <- matrix(rep(1,49), ncol=7) / 49
关于r - 如何标准化卷积图像?我是不是该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596774/
我正在尝试学习 Knockout 并尝试创建一个照片 uploader 。我已成功将一些图像存储在数组中。现在我想回帖。在我的 knockout 码(Javascript)中,我这样做: 我在 Jav
我正在使用 php 编写脚本。我的典型问题是如何在 mysql 中添加一个有很多替代文本和图像的问题。想象一下有机化学中具有苯结构的描述。 最有效的方法是什么?据我所知,如果我有一个图像,我可以在数据
我在两个图像之间有一个按钮,我想将按钮居中到图像高度。有人可以帮帮我吗? Entrar
下面的代码示例可以在这里查看 - http://dev.touch-akl.com/celebtrations/ 我一直在尝试做的是在 Canvas 上绘制 2 个图像(发光,然后耀斑。这些图像的链接
请检查此https://jsfiddle.net/rhbwpn19/4/ 图像预览对于第一篇帖子工作正常,但对于其他帖子则不然。 我应该在这里改变什么? function readURL(input)
我对 Canvas 有疑问。我可以用单个图像绘制 Canvas ,但我不能用单独的图像绘制每个 Canvas 。- 如果数据只有一个图像,它工作正常,但数据有多个图像,它不工作你能帮帮我吗? va
我的问题很简单。如何获取 UIImage 的扩展类型?我只能将图像作为 UIImage 而不是它的名称。图像可以是静态的,也可以从手机图库甚至文件路径中获取。如果有人可以为此提供一点帮助,将不胜感激。
我有一个包含 67 个独立路径的 SVG 图像。 是否有任何库/教程可以为每个路径创建单独的光栅图像(例如 PNG),并可能根据路径 ID 命名它们? 最佳答案 谢谢大家。我最终使用了两个答案的组合。
我想将鼠标悬停在一张图片(音乐专辑)上,然后播放一张唱片,所以我希望它向右移动并旋转一点,当它悬停时我希望它恢复正常动画片。它已经可以向右移动,但我无法让它随之旋转。我喜欢让它尽可能简单,因为我不是编
Retina iOS 设备不显示@2X 图像,它显示 1X 图像。 我正在使用 Xcode 4.2.1 Build 4D502,该应用程序的目标是 iOS 5。 我创建了一个测试应用(主/细节)并添加
我正在尝试从头开始以 Angular 实现图像 slider ,并尝试复制 w3school基于图像 slider 。 下面我尝试用 Angular 实现,谁能指导我如何使用 Angular 实现?
我正在尝试获取图像的图像数据,其中 w= 图像宽度,h = 图像高度 for (int i = x; i imageData[pos]>0) //Taking data (here is the pr
我的网页最初通过在 javascript 中动态创建图像填充了大约 1000 个缩略图。由于权限问题,我迁移到 suPHP。现在不用标准 标签本身 我正在通过这个 php 脚本进行检索 $file
我正在尝试将 python opencv 图像转换为 QPixmap。 我按照指示显示Page Link我的代码附在下面 img = cv2.imread('test.png')[:,:,::1]/2
我试图在这个 Repository 中找出语义分割数据集的 NYU-v2 . 我很难理解图像标签是如何存储的。 例如,给定以下图像: 对应的标签图片为: 现在,如果我在 OpenCV 中打开标签图像,
import java.util.Random; class svg{ public static void main(String[] args){ String f="\"
我有一张 8x8 的图片。 (位图 - 可以更改) 我想做的是能够绘制一个形状,给定一个 Path 和 Paint 对象到我的 SurfaceView 上。 目前我所能做的就是用纯色填充形状。我怎样才
要在页面上显示图像,你需要使用源属性(src)。src 指 source 。源属性的值是图像的 URL 地址。 定义图像的语法是: 在浏览器无法载入图像时,替换文本属性告诉读者她们失去的信息。此
**MMEditing是基于PyTorch的图像&视频编辑开源工具箱,支持图像和视频超分辨率(super-resolution)、图像修复(inpainting)、图像抠图(matting)、
我正在尝试通过资源文件将图像插入到我的程序中,如下所示: green.png other files 当我尝试使用 QImage 或 QPixm
我是一名优秀的程序员,十分优秀!