首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这张图片放大后的结果是什么?

这张图片放大后的结果是什么?
EN

Stack Overflow用户
提问于 2018-01-08 03:31:04
回答 1查看 183关注 0票数 2

我有以下矩阵:

代码语言:javascript
复制
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 1     1     0     0     0     0     0
 1     0     0     0     0     1     1
 1     0     0     0     0     1     1

我想用下面的结构元素来扩展它:

代码语言:javascript
复制
 1     0     0
 1     1     1
 1     1     1

我已经在Matlab上做了膨胀,但结果与我手工做的结果不匹配。所以我想我遗漏了一些东西。据我所知,如果结构化元素中的任何一个' 1‘触及矩阵中的任何一个'1’,那么这意味着它是命中的,当前窗口的中心应该设置为1。如果我以这种方式进行扩张,我将得到如下结果(不考虑边缘):

代码语言:javascript
复制
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     1     1     0     0     0     0
 1     1     1     0     1     1     0
 1     1     1     0     1     1     1
 1     0     0     0     0     1     1

但Matlab给出了以下结果:

代码语言:javascript
复制
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 0     0     0     0     0     0     0
 1     **0**     **0**     0     0     0     0
 1     1     1     0     1     1     0
 1     1     1     0     1     1     1
 1     1     0     0     1     1     1

不考虑边缘,它看起来几乎和我的结果一样,但粗体样式的像素在我的结果中是'1‘,在Matlab的结果中是'0’。我做错了什么?在原始图像中,那些‘0’下面的像素是'1‘,当窗口的中心在那些’0‘上时,结构元素在那个空间上有'1’,所以它是一个命中,中心必须设置为‘1’,但Matlab不这样做。有人能给我解释一下原因吗?我是不是遗漏了什么重要的东西?

EN

回答 1

Stack Overflow用户

发布于 2018-01-08 05:43:50

假设矩阵A是您的图像,矩阵B是结构化元素。您应该在矩阵A的所有边都填充零。假设你有矩阵C,然后你应该执行C和B的逻辑与运算,结果矩阵D将是一个扩张矩阵。有关更多信息,请参见here.这里是没有'imdilate‘函数的扩展图像的Matlab代码:

代码语言:javascript
复制
clc;clearvars;close all;
%Image Dilation without using 'imdilate' function
% Matrix A is our image
A=[0 0 0 0 0 0 0;
    0 0 0 0 0 0 0;
    0 0 0 0 0 0 0 ;
    0 0 0 0 0 0 0;
    1 1 0 0 0 0 0;
    1 0 0 0 0 1 1 ;
    1 0 0 0 0 1 1 ];
%Structuring element
B=[1 0 0; 1 1 1; 1 1 1];
%Pad zeros on all the sides
C=padarray(A,[1 1]);
%Intialize a matrix of matrix size A with zeros
D=false(size(A));
for i=1:size(C,1)-2
    for j=1:size(C,2)-2
        %Perform logical AND operation
        D(i,j)=sum(sum(B&C(i:i+2,j:j+2)));
    end
end

display(D);

这是我的输出,扩张矩阵D:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48140791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档