Followings are the code that I wrote in Octave to creates all the plots shown in this page. You may copy these code and play with these codes. Change variables and try yourself until you get your own intuitive understanding.
< Code 1 >
img = [0 0 0 0 0 0 0 0 0 0; ...
0 0 0 0 1 1 1 0 0 0; ...
0 0 0 1 1 1 1 0 0 0; ...
0 0 1 1 1 1 1 0 0 0; ...
0 0 0 0 1 1 1 0 0 0; ...
0 0 0 0 1 1 1 0 0 0; ...
0 0 0 0 1 1 1 0 0 0; ...
0 1 1 1 1 1 1 1 1 0; ...
0 1 1 1 1 1 1 1 1 0; ...
0 0 0 0 0 0 0 0 0 0];
flt = [-1 0 1; ...
-2 0 2; ...
-1 0 1];
hFig = figure(1,'Position',[300 300 1020 300]);
cx = 7;
cy = 7;
%--------------------------------------------------------------------
% Display Image
subplot(1,4,1);
line([0 0],[13 14],'color','black');
line([0 1],[14 14],'color','black');
tx = 0;
ty = 0;
rdx = 1;
rdy = 1;
for j = 1:10
for i = 1:10
rx = tx + i*rdx;
ry = ty + j*rdy;
if img(10-j+1,i) > 0
c = 0;
tStr = '1';
else
c = 1;
tStr = '0';
end
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
if c == 1
text(rx+0.3,ry+0.5,tStr,'color','black');
else
text(rx+0.3,ry+0.5,tStr,'color','yellow');
end
end
end
rectangle('Position',[cx+1 10-cy-1-1 3 3],'EdgeColor','red');
text(5,12,'image');
axis([0 12 -4 16]);
axis off;
%--------------------------------------------------------------------
% Display Filter
subplot(1,4,2);
tx = 0;
ty = 0;
rdx = 1;
rdy = 1;
for j = 1:10
for i = 1:10
rx = tx + i*rdx;
ry = ty + j*rdy;
c = 1;
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
end
end
tx = 0;
ty = 11;
rdx = 1;
rdy = 1;
for j = 1:3
for i = 1:3
rx = cx + tx + i*rdx;
ry = -cy + ty - j*rdy;
c = 1;
tStr = sprintf("%d",flt(j,i));
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
if flt(j,i) < 0
text(rx+0.0,ry+0.5,tStr,'color','black');
else
text(rx+0.2,ry+0.5,tStr,'color','black');
end
end
end
rectangle('Position',[cx+1 10-cy-1-1 3 3],'EdgeColor','red');
text(5,12,'filter');
axis([0 12 -4 16]);
axis off;
%--------------------------------------------------------------------
% Display Image x Filter
subplot(1,4,3);
tx = 0;
ty = 0;
rdx = 1;
rdy = 1;
for j = 1:10
for i = 1:10
rx = tx + i*rdx;
ry = ty + j*rdy;
c = 1;
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
end
end
tx = 0;
ty = 11;
rdx = 1;
rdy = 1;
mFlt = [0 0 0;...
0 0 0;
0 0 0];
for j = 1:3
for i = 1:3
mFlt(j,i) = img(j+cy,i+cx) * flt(j,i);
end
end
for j = 1:3
for i = 1:3
rx = cx + tx + i*rdx;
ry = -cy + ty - j*rdy;
c = 1;
tStr = sprintf("%d",mFlt(j,i));
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
if mFlt(j,i) < 0
text(rx+0.0,ry+0.5,tStr,'color','black');
else
text(rx+0.2,ry+0.5,tStr,'color','black');
end
end
end
rectangle('Position',[cx+1 10-cy-1-1 3 3],'EdgeColor','red');
text(3,12,'image x filter');
axis([0 12 -4 16]);
axis off;
%--------------------------------------------------------------------
% Display Image * Filter
subplot(1,4,4);
tx = 0;
ty = 0;
rdx = 1;
rdy = 1;
sxMax = 0
for j = 1:10
for i = 1:10
rx = tx + i*rdx;
ry = ty + j*rdy;
c = 1;
rectangle('Position',[rx ry rdx rdy],'FaceColor',[c c c]);
%text(rx+0.2,ry+0.5,tStr,'color',[1 0 0]);
end
end
for sy = 0:cy
if sy < cy
sxMax = 7;
else
sxMax = cx;
end
for sx = 0:sxMax
mFlt = [0 0 0;...
0 0 0;
0 0 0];
for j = 1:3
for i = 1:3
mFlt(j,i) = img(j+sy,i+sx) * flt(j,i);
end
end
s = sum(reshape(mFlt,[],1));
tStr = sprintf("%d",s);
c = 0.5+(s/10);
if s == 0
rectangle('Position',[sx+1+1 10-sy-1 rdx rdy],'FaceColor',[0.1 0.1 0.1]);
else
rectangle('Position',[sx+1+1 10-sy-1 rdx rdy],'FaceColor',[c 0 0.5-0.5*c]);
end
if s < 0
text(sx+1+1+0.0,10-sy-1+0.5,tStr,'color','yellow');
else
text(sx+1+1+0.2,10-sy-1+0.5,tStr,'color','yellow');
end
end
end
rectangle('Position',[cx+1+1 10-cy-1 1 1],'EdgeColor','red');
text(3,12,'image * filter');
line([12 12],[-2 -1],'color','black');
line([11 12],[-2 -2],'color','black');
axis([0 12 -4 16]);
axis off;
|