除了应该是彩色的子图像之外,如何将整个图像转换为灰度?

时间:2015-04-09 22:08:46

标签: matlab image-processing

我有一张图像和一张从原始图像中裁剪出的子图像。

这是我到目前为止编写的代码:

val1 = imread(img);
val2 = imread(img_w);
gray1 = rgb2gray(val1);%grayscaling both images
gray2 = rgb2gray(val2);
matchingval = normxcorr2(gray1,gray2);%normalized cross correlation 
[max_c,imax]=max(abs(matchingval(:)));

在此之后我被卡住了。我不知道如何更改整个图像灰度,除了应该是彩色的子图像。

我该怎么做?

谢谢。

3 个答案:

答案 0 :(得分:0)

如果您知道图像的坐标是什么,您可以随时只在感兴趣的部分使用rgb2gray。

例如,我刚才在图像上试过这个:

im(500:1045,500:1200,1)=rgb2gray(im(500:1045,500:1200,1:3)); im(500:1045,500:1200,2)=rgb2gray(im(500:1045,500:1200,1:3)); im(500:1045,500:1200,3)=rgb2gray(im(500:1045,500:1200,1:3)); 我在这里拍摄了行(500到1045),列(500到1200)和图像的rgb深度(1到3),并将rgb2gray函数应用到了这一点。我做了三次,因为rgb2gray的输出是2d矩阵,彩色图像是3d矩阵,所以我需要逐层更改它。

这对我有用,只使图像的一部分变成灰色,但其余部分保持颜色。

您可能遇到的问题是,彩色图像是3维,而灰度图只需要2维。组合它们意味着灰度必须在3d矩阵中。

根据您的想法,此技术可能有所帮助,也可能无效。

答案 1 :(得分:0)

从您的代码判断,您正在阅读MATLAB中的图像和子图像。您需要知道的是提取子图像的位置的坐标。完成后,只需将原始彩色图像转换为灰度,然后在第三维中将此图像复制三次。您需要这样做,以便您可以在此图像中放置颜色像素。

对于RGB图像,灰度图像的RGB分量都相同。在第三维中复制此图像三次会创建RGB版本的灰度图像。完成后,只需使用提取子图像的位置的行和列坐标,并将其放入等效的RGB灰度图像中。

因此,给定存储在img中的彩色图像和存储在imgsub中的子图像,并指定在row1,col1row2,col2中提取子图像的行和列{1}} - row1,col1是子图像的左上角,row2,col2是右下角,请执行以下操作:

img_gray = rgb2gray(img);
img_gray = cat(3, img_gray, img_gray, img_gray);
img_gray(row1:row2, col1:col2,:) = imgsub;

为了证明这一点,让我们用MATLAB中的图像来试试这个。我们将使用MATLAB中图像处理工具箱的onion.png图像。因此:

img = imread('onion.png');

我们还要定义row1,col1,row2,col2

row1 = 50;
row2 = 90;
col1 = 80;
col2 = 150;

让我们得到子图像:

imgsub = img(row1:row2,col1:col2,:);

运行上面的代码,这是我们得到的图像:

enter image description here

答案 2 :(得分:0)

我使用与rayryeng's answer相同的示例,并尝试通过HSV转换来解决。 基本思想是将第二层即饱和层设置为0(因此它们是grayscale)。然后仅为子图像区域用原始饱和度层重写图层,这样它们就会有饱和度值。

<强>代码:

img = imread('onion.png');
img = rgb2hsv(img);
sPlane = zeros(size(img(:,:,1)));
sPlane(50:90,80:150) = img(50:90,80:150,2);
img(:,:,2) = sPlane;
img = hsv2rgb(img);
imshow(img);

输出(与rayryeng's output相同)

enter image description here

相关答案以及更多详情here