Matlab中imtranslate填充问题

在Matlab中使用imtranslate函数移动图像时,会出现黑色边界,如果我想使用原始图像的边缘像素填充,应该怎么做?按照matlab官方文档
J = imtranslate(w,[b ,a], 'nearest');
运行上面命令,移动后的图像边界仍然是黑色

缩放下图片,避免出现黑框。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果要使用原始图像的边缘像素填充移动后的图像边界,可以使用imwarp函数并设置FillValues参数为'replicate'。具体步骤如下:

  1. 定义仿射变换矩阵T,表示图像的平移变换。
  2. 使用imref2d函数创建一个参考坐标系,用于对变换后的图像进行定位。
  3. 使用imwarp函数进行图像变换,并设置FillValues参数为'replicate'以使用原始图像的边缘像素进行填充。

示例代码如下:

% 读取图像
I = imread('lena.png');

% 定义平移向量
a = 50; b = 50;

% 定义仿射变换矩阵
T = [1 0 0; 0 1 0; a b 1];

% 创建参考坐标系
R = imref2d(size(I));

% 进行图像平移,并使用原始图像的边缘像素进行填充
J = imwarp(I, affine2d(T), 'OutputView', R, 'FillValues', 'replicate');

% 显示变换前后的图像
figure;
subplot(1,2,1); imshow(I); title('原始图像');
subplot(1,2,2); imshow(J); title('移动后的图像');


运行上述代码,将会显示移动前后的图像,移动后的边界将会使用原始图像的边缘像素进行填充。