【发布时间】:2023-04-02 12:20:01
【问题描述】:
我需要一个 Matlab 代码来将我的 RGB 图像的左半部分转换为灰度图像并保持右半部分不变?
我已经知道如何使用“rgb2gray”命令将整个图像转换为灰度,但我只想将左半部分或右半部分转换为灰度。
【问题讨论】:
标签: matlab
我需要一个 Matlab 代码来将我的 RGB 图像的左半部分转换为灰度图像并保持右半部分不变?
我已经知道如何使用“rgb2gray”命令将整个图像转换为灰度,但我只想将左半部分或右半部分转换为灰度。
【问题讨论】:
标签: matlab
由于 Matlab 中的图像本质上可以被视为(像素)矩阵(RGB 具有 3 个深度层,而不是灰度的单个深度层),您可以将它们视为这样,在这种情况下构造一个分割图像简化为对矩阵的一些简单操作:
例如
imgRGB = imread('peppers.png');
imgGray = rgb2gray(imgRGB);
[r, c, ~] = size(imgRGB);
c = round(c/2);
imgSplit = imgRGB;
for i = 1:3
imgSplit([1:r],[1:c],i) = imgGray([1:r],[1:c]);
end
imshow(imgSplit)
%// imwrite(imgSplit,'imgSplit.png')
或者,如果您不希望两个新图像矩阵(imgGray 和imgRGB)的空间开销,您可以直接改变 rgb 图像矩阵,产生与上述相同的结果。
imgRGB = imread('peppers.png');
[r, c, ~] = size(imgRGB);
c = round(c/2);
imgRGB([1:r],[1:c],1) = rgb2gray(imgRGB([1:r],[1:c],:));
for i = 2:3
imgRGB([1:r],[1:c],i) = imgRGB([1:r],[1:c],1);
end
imshow(imgRGB)
%// imwrite(imgRGB,'imgSplit.png')
【讨论】:
img(:, 1:end/2, :) = repmat(rgb2gray(img(:, 1:end/2, :)), 1, 1, 3);