Ram*_*amo 13 matlab image image-processing
如何在一个图像上选择一个随机点,然后使用互相关在另一个图像上找到它的对应点?
所以基本上我有image1,我想在它上面选择一个点(自动),然后在image2上找到它对应的/相似的点.
以下是一些示例图片:
完整图像:

补丁:

互相关的结果:

mbs*_*kel 11
好吧,xcorr2基本上可以看作是分析正向和负向的所有可能变化,并给出衡量它们与每个班次的匹配程度的指标.因此,对于大小N x N的图像,结果必须具有大小(2*N-1) x (2*N-1),其中[N, N]如果两个图像相等或不相移,则索引处的相关性将是最大的.如果它们被移动10个像素,则最大相关性将为[N-10, N],依此类推.因此,您需要减去N才能获得绝对移位.
使用您的实际代码可能更容易提供帮助.但让我们看一个例子:
(A)我们读取图像并选择具有偏移da和db的两个不同的子图像
Orig = imread('rice.png');
N = 200; range = 1:N;
da = [0 20];
db = [30 30];
A=Orig(da(1) + range, da(2) + range);
B=Orig(db(1) + range, db(2) + range);
Run Code Online (Sandbox Code Playgroud)
(b)计算互相关并找到最大值
X = normxcorr2(A, B);
m = max(X(:));
[i,j] = find(X == m);
Run Code Online (Sandbox Code Playgroud)
(C)使用恢复的班次将它们拼凑在一起
R = zeros(2*N, 2*N);
R(N + range, N + range) = B;
R(i + range, j + range) = A;
Run Code Online (Sandbox Code Playgroud)
(D)说明事情
figure
subplot(2,2,1), imagesc(A)
subplot(2,2,2), imagesc(B)
subplot(2,2,3), imagesc(X)
rectangle('Position', [j-1 i-1 2 2]), line([N j], [N i])
subplot(2,2,4), imagesc(R);
Run Code Online (Sandbox Code Playgroud)
(E)将故意转移与恢复的转变进行比较
delta_orig = da - db
%--> [30 10]
delta_recovered = [i - N, j - N]
%--> [30 10]
Run Code Online (Sandbox Code Playgroud)
正如您在(E)中看到的那样,我们得到了我们在(A)中特意引入的转变.

或根据您的情况调整:
full=rgb2gray(imread('a.jpg'));
template=rgb2gray(imread('b.jpg'));
S_full = size(full);
S_temp = size(template);
X=normxcorr2(template, full);
m=max(X(:));
[i,j]=find(X==m);
figure, colormap gray
subplot(2,2,1), title('full'), imagesc(full)
subplot(2,2,2), title('template'), imagesc(template),
subplot(2,2,3), imagesc(X), rectangle('Position', [j-20 i-20 40 40])
R = zeros(S_temp);
shift_a = [0 0];
shift_b = [i j] - S_temp;
R((1:S_full(1))+shift_a(1), (1:S_full(2))+shift_a(2)) = full;
R((1:S_temp(1))+shift_b(1), (1:S_temp(2))+shift_b(2)) = template;
subplot(2,2,4), imagesc(R);
Run Code Online (Sandbox Code Playgroud)

但是,要使此方法正常工作,patch(template)和完整图像应缩放到相同的分辨率.
这里也可以找到更详细的例子.
| 归档时间: |
|
| 查看次数: |
18072 次 |
| 最近记录: |