如何显示两个互相关图像之间的颤动图?

问题描述 投票:0回答:1

我已经在MATLAB中编写了一个代码,该代码使我可以自动裁剪一幅图像中的感兴趣区域,并与另一幅图像进行互相关。相关区域通过颤动图识别,我想在两个图像上进行扩展(它们以垂直蒙太奇形式排列)。但是,颤动箭头仅出现在上方图像中。有谁知道为什么会这样(以及如何解决)?希望这很简单。我在下面包含了一些代码。谢谢!

Initial = rgb2gray(imread('img9.png'));
Secondary = rgb2gray(imread('img8.png'));
XC = imcrop(Initial, [0 0 1300 350]);
YC = imcrop(Secondary, [0 0 1300 350]);
Multi = cat(1,XC,YC);
VertLinSpace1 = linspace(0, 300, 7);
HorzLinSpace1 = linspace(0, 1250, 24);
imshow(Multi)
axis( [0  1300   0  700])
axis on
for k1 = 1:length(VertLinSpace1)
    for k2 = 1:length(HorzLinSpace1)
        template = imcrop(Multi, [HorzLinSpace1(k2)  VertLinSpace1(k1), 50  50]);
        c = normxcorr2(template,YC);
        [ypeak, xpeak] = find(c==max(c(:)));
        yO = ypeak-size(template,1);
        xO = xpeak-size(template,2);
        x1 = HorzLinSpace1(k2); y1 = VertLinSpace1(k1); x2 = xO+1; y2 = yO+1;
        a = [x1, y1, 0];
        b = [x2, y2, 0];
        Q = [x1 y1
            x2 y2];
        QX = Q(:,1);
        QY = Q(:,2);
        [~,UV] = gradient(Q);
        UVX = [UV(1,1); 0];
        UVY = [UV(1,2); 0];
        figure(1)
        hold on
        quiver(QX, QY, UVX, UVY, 'color','red')
        hold off
    end
end

Initial imageComparison image

image matlab matlab-figure matlab-guide
1个回答
0
投票

我简化了箭头XY的计算,但要点是将350指向下半部分。我加了25来指示模板的中间(箭头的尾部)。这可能不是100%准确的解决方案,因为例如50 x 50像素正方形的中间为25.5(每侧25像素),但是它解决了主要问题,您可以从此处获取。

Initial = rgb2gray(imread('https://i.stack.imgur.com/5fTa1.png'));
Secondary = rgb2gray(imread(('https://i.stack.imgur.com/sg1co.png')));
XC = imcrop(Initial, [0 0 1300 350]);
YC = imcrop(Secondary, [0 0 1300 350]);
Multi = cat(1,XC,YC);
VertLinSpace1 = linspace(0, 300, 7);
HorzLinSpace1 = linspace(0, 1250, 24);
imshow(Multi)
axis( [0  1300   0  700])
axis on
hold on
counter = 0;
for kV = 1:length(VertLinSpace1)
    for kH = 1:length(HorzLinSpace1)
        template = imcrop(Multi, [HorzLinSpace1(kH)  VertLinSpace1(kV), 50  50]);
        c = normxcorr2(template,YC);
        [ypeak, xpeak] = find(c==max(c(:)));
        fromXY = [HorzLinSpace1(kH)+25,VertLinSpace1(kV)+25];
        addXY = [xpeak-fromXY(1),350+ypeak-fromXY(2)];
        quiver(fromXY(1), fromXY(2), addXY(1), addXY(2), 'color','red')
        drawnow
    end
end
© www.soinside.com 2019 - 2024. All rights reserved.