如何解决为什么在同一张图像上得到了两个带有相同内核的不同特征图?
我随机抽取一个内核,并将其应用于padding ='valid',stride =(1,1),内核大小=(3,3)的图像。
这是正常图像:
这是应用滤镜后的图片:
然后我将原始图像旋转了90度,然后更改为:
然后我在旋转的图像上应用了相同的滤镜,并将其作为输出:
然后旋转此输出图像,以使其旋转与先前的特征图相同。 旋转此旋转特征图并将其与以前的特征图进行比较之后,我发现它们并不相同。
这是两个要素图的图像:
如您所见,它们显然不相同。
这意味着要素映射会随着输入图像中要素位置的变化而变化。
但是为什么会这样呢? 例如:假设我们有一个检测“眼睛”的内核,然后对图像中心的“眼睛”图像上的内核进行训练后,我们给它一个图像,这一次,“眼睛”位于顶部-图片的左侧。它仍然会做得很好,因为它将在图像的每个(5,5)部分上搜索眼睛(假设内核的大小为(5,5)),因此该功能的位置不重要在图像中。
那么,为什么我们在“ 5”的示例中更改输入图像中特征的位置时映射了特征?
解决方法
您有2个不同的特征图,因为当您将原始图像旋转90度时,不再以相同的方式应用内核。这是一个演示:
假设这是您的图片
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
这是您的2乘2内核:
1 2
3 4
如果将此滤镜应用到图像的2 * 2凝视部分,则会得到以下值:
(1*1) + (2*2) + (1*3) + (2*4)
= 16
将图像旋转90度时,图像变为:
5 5 5 5 5
4 4 4 4 4
3 3 3 3 3
2 2 2 2 2
1 1 1 1 1
现在在此图像上应用相同的内核,但是由于滤镜图将再次旋转,因此我们将在旋转图像的左下角计算滤镜图的卷积。 (很难理解为什么我们要在旋转图像的左下角应用滤镜。)
(2*1) + (2*2) + (1*3) + (1*4)
= 13
由于13和16不相等,因此您获得了不同的特征图。
,过滤器不会旋转:对于3×3像素的窗口,您有9个权重表示窗口中的像素将在输出中表示多少,而像素不会旋转。如果旋转内核权重,则输出将相同。
假设您的内核具有这样的权重:
@HostListener('input',['$event']) // or/and keydown
onInputChange(event: Event): void {...}
结果是将所有像素移到底部一个位置。如果旋转图像,请应用滤镜并向后旋转,所有像素都将向左移动。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。