C#:在 MatLab 中将图像转换为灰度

介绍

       本文是关于如何在没有内置函数的情况下在 MatLab 中将图像从 RGB 转换为灰度的方法。这将使您了解 MatLab 如何处理图像层,并了解底层 RGB 到灰度转换函数的工作原理。

       将图像转换为灰度并知道如何进行有很多好处。在我看来,将彩色图像转换为灰度图像的主要好处是它占用的空间要少得多。如果您不了解图像在计算机中的存储方式,请让我解释一下。

RGB 图像本质上是三个图像层叠在一起;红色比例图像、绿色比例图像和蓝色比例图像,其中每个像素为 8 位(强度值范围为 0 - 255)。要存储 RGB 图像的单个像素,您需要为所有三种颜色存储 8 位,因此每个像素总共 24 位。

C#:在 MatLab 中将图像转换为灰度_第1张图片

当您将此图像转换为灰度时,您只需为每个像素存储一个 8 位值作为灰度值。您从每像素 24 位降低到每像素 8 位,因此您的灰度图像将仅为原始图像大小的 33%。

除了为您节省大量空间外,在许多不同情况下处理灰度图像也更有意义。在各种图像处理应用程序中使用灰度图像要容易得多。问问自己,对于计算机来说,使用包含三层颜色值的图像还是使用单层图像会更容易操作?很明显,单层图像。在此基础上,仅处理单层时也更容易区分图像的特征。因此,诸如边缘检测、主成分分析、局部二进制模式和类似性质的过程不仅对计算机来说更容易处理,而且对您来说也更容易编码。

使用代码

如果您以前从未使用过 MatLab,语法可能有点混乱,但不用担心,它并不难。下面,您可以看到将 RGB 图像转换为灰度图像的函数。

function returnedImage = toGrayscale(image)
        i = image;
        R = i(:, :, 1);
        G = i(:, :, 2);
        B = i(:, :, 3);
        newImage = zeros(size(i,1), size(i,2), 'uint8');
        
        for x=1:size(i,1)
           for y=1:size(i,2)
               newImage(x,y) = (R(x,y)*.3)+(G(x,y)*.6)+(B(x,y)*.1);
           end
        end
        
        returnedImage = newImage;
end

第一步是将图像分成 R、G 和 B 三个不同的二维矩阵。" R = i(:, :, 1);" 的语法表示您正在创建一个新矩阵R并将其设置为等于图像中第一层的所有行和列i(希望这是有道理的)。然后创建一个新图像,其中包含与原始图像大小相同的所有零。

之后,您只需遍历新图像中的每个像素,并将该像素设置为等于同一位置的 R、G 和 B 像素乘以指定权重的总和。从我的例子中可以看出,R 乘以 0.3,G 乘以 0.6,B 0.1。然后返回图像。

您的第一个想法可能是简单地取所有三个像素的平均值并将其设置为灰度图像中的值,但事实证明这太暗了。权重完全取决于您,您可以根据需要更改它们。对于我的应用程序,我发现这种加权方案效果最好。

要实现,您将编写如下代码:

myImage = imread('faceplantImage.jpg');

figure
subplot(1,2,1);
imshow(myImage);
title('Original Image');

subplot(1,2,2);
grayScaleImage = toGrayscale(myImage);
imshow(grayScaleImage);
title('Grayscale Image');

从中,您可以将完成的灰度图像与原始图像进行比较。

C#:在 MatLab 中将图像转换为灰度_第2张图片

如果您是 MatLab 的新手并且有兴趣了解更多信息,这里有一个很好的资源:

  • MATLABDocumentation

 

你可能感兴趣的:(MatLab,matlab,开发语言,算法)