matlab - Matlab/Octave 中的二维卷积
问题描述
I = imread ("lena.jpg");
%imshow(I);
K = I;
C = conv2(I, K);
imshow(C);
我期待类似于此链接中所示的以下内容。
但是,我的八度输出是空白的:
可能的原因是什么?
而且,我怎样才能获得预期的输出?
解决方案
imshow()
期望值在 [0-255] 之间。卷积后,所有值都高于 255。当然,当您使用 时imshow(C)
,matlab/octave 使用uint8()
. 您的所有值都等于 255,结果是白色图像。(0 = 黑色,255 = 白色)。
您还应该考虑到一些事情:
将选项“相同”添加到卷积以保留图像的原始大小:
conv2(I,K,'same')
如果你只应用这样的卷积,你将获得强烈的边框效果,因为图像的中心值将比图像边框中的值乘以更多时间。您应该添加一个补偿矩阵:
border_compensation = conv2(ones(size(K)),ones(size(K)),'same') C = conv2(I,K,'same')./border_compensation
标准化最终结果(不要考虑第 2 点。如果你真的想要你在问题中指出的那种输出)
C = uint8(C/max(C(:))*255)
推荐阅读
- java - 使用 mvn spring-boot:build-image 时出错 - 收到意外的 HTTP 状态:500 服务器错误”
- java - 我正在制作的 DiceRoll 项目中的 If 和 Switch 语句问题
- migration - RavenDB - 将多个数据库从 3.5 迁移到 4.2
- haskell - 哈斯克尔 | 努力理解类型声明和缩写
- android - 如何修复 Android 模拟器的“地址边界错误”?
- azure - Microsoft 多租户应用程序作为个人开发人员 - Azure Active Directory
- java - 如何在 NetBeans 8.2 中添加外部库?
- r - 如何创建按PERMNO分组并在R中按日期排列的累积变量
- python - 我正在尝试从我的用户那里获取:first_name 和 last_name,并注意到在我的 html 代码中正在改进
- android - 为什么我的位图图像出现在警报对话框后面?