Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MATLAB自动填充任意图像?_Matlab_Image Processing - Fatal编程技术网

如何使用MATLAB自动填充任意图像?

如何使用MATLAB自动填充任意图像?,matlab,image-processing,Matlab,Image Processing,这是基于这个答案的另一个问题: 一般的解决方案应该适用于所有背景颜色和长宽比。通常情况下,在MATLAB中有许多不同的方法可以做到这一点。我将列出一些填充的示例 解决方案#1:添加填充以生成方形图像 此解决方案采用给定的颜色padColor,并使用函数复制该颜色,以创建正确大小、形状和颜色的填充。然后使用以下函数将填充添加到图像的侧面: 您可以修改上述解决方案以适用于,或将定义padColor的两行替换为以下内容之一: padColor = uint8(1); %# For an ind

这是基于这个答案的另一个问题:


一般的解决方案应该适用于所有背景颜色和长宽比。

通常情况下,在MATLAB中有许多不同的方法可以做到这一点。我将列出一些填充的示例

解决方案#1:添加填充以生成方形图像 此解决方案采用给定的颜色
padColor
,并使用函数复制该颜色,以创建正确大小、形状和颜色的填充。然后使用以下函数将填充添加到图像的侧面:

您可以修改上述解决方案以适用于,或将定义
padColor
的两行替换为以下内容之一:

padColor = uint8(1);    %# For an indexed image (index of color to use)
padColor = uint8(255);  %# For a grayscale image (white)
padColor = true;        %# For a binary image (white)
padColor = uint8(1);    %# For an indexed image (index of color to use)
padColor = uint8(255);  %# For a grayscale image (white)
padColor = true;        %# For a binary image (white)

解决方案#2:制作一张空白正方形图像并插入原始图像 此解决方案采用给定的颜色
padColor
,并使用函数复制该颜色,以创建该颜色的空白方形图像。然后将原始图像插入该空白图像的中心位置:

[r,c,d] = size(rgbImage);  %# Get the image dimensions
padColor = [1 1 1];        %# RGB triple for pad color (white)
padColor = reshape(padColor,1,1,3);  %# Reshape pad color to 1-by-1-by-3
if c > r                   %# Pad rows
  newImage = repmat(padColor,c);  %# Make c-by-c-by-3 matrix of given color
  rowIndex = floor((c-r)/2);      %# Row index for inserting image
  newImage(rowIndex+(1:r),:,:) = rgbImage;     %# Insert the image
elseif r > c               %# Pad columns
  newImage = repmat(padColor,r);  %# Make r-by-r-by-3 matrix of given color
  columnIndex = floor((r-c)/2);   %# Column index for inserting image
  newImage(:,columnIndex+(1:c),:) = rgbImage;  %# Insert the image
end
您可以修改上述解决方案以适用于,或将定义
padColor
的两行替换为以下内容之一:

padColor = uint8(1);    %# For an indexed image (index of color to use)
padColor = uint8(255);  %# For a grayscale image (white)
padColor = true;        %# For a binary image (white)
padColor = uint8(1);    %# For an indexed image (index of color to use)
padColor = uint8(255);  %# For a grayscale image (white)
padColor = true;        %# For a binary image (white)

解决方案#3:使用 此解决方案使用函数创建填充以使图像成为方形。不幸的是,在使用此解决方案时,没有简单的方法来指定所需的填充颜色(请参见下文)。但是,您可以使用
'replicate'
参数在添加填充的图像边缘复制颜色:

[r,c,d] = size(rgbImage);  %# Get the image dimensions
nPad = abs(c-r)/2;         %# The padding size
if c > r                   %# Pad rows
  newImage = padarray(rgbImage,[floor(nPad) 0],...  %# Pad top
                      'replicate','pre');
  newImage = padarray(newImage,[ceil(nPad) 0],...   %# Pad bottom
                      'replicate','post');
elseif r > c               %# Pad columns
  newImage = padarray(rgbImage,[0 floor(nPad)],...  %# Pad left
                      'replicate','pre');
  newImage = padarray(newImage,[0 ceil(nPad)],...   %# Pad right
                      'replicate','post');
end

此解决方案适用于或。对于这三种图像类型,您可以选择将
'replicate'
参数替换为要用于填充的标量值(即
uint8(255)
用于灰度图像中的白色填充)。例如,用单个值替换
'replicate'
参数将只允许您创建从白色到黑色的灰色填充颜色(即
1
创建白色填充)。

@user198729:函数reformate更改矩阵或向量的大小。我将
padColor
从1-x-3矩阵更改为1-x-1-x-3矩阵,因为这样以后可以更容易地使用REPMAT将其扩展为N-x-M-x-3填充矩阵。似乎没有逻辑来检索填充的背景色,所以我假设它是硬编码的,这不适用于所有背景色?@user198729:我添加了一些选项供您选择。您可以轻松地自己添加逻辑来选择您认为的“背景色”。例如,您可以通过说
padColor=rgbImage(1,1,:)来选择图像的左上角颜色作为背景色。或者,我上面列出的第三种解决方案将简单地复制图像的边缘颜色,以对填充区域进行着色。事先感谢,我似乎很难理解,一旦理解,我将接受:)cat(2,repmat(padColor,r,floor(nPad)),…
中的
..
是什么意思?