Message Boards Message Boards


[✓] Convert an rgb image into grayscale using For function and matrix?

Posted 9 months ago
3 Replies
2 Total Likes

Hi, I'm new at image processing with mathematica and I need to convert a rgb image to a grayscale one using For function. I've tried this but I don't know how to do it:

enter image description here

3 Replies


Why do you use For[] function. I strongly discourage you doing so. In Wolfram Language conversion from RGB to "Grayscale" is easier than pronouncing it :)

i  =  Import["ExampleData/coneflower.jpg"]; 
(* ==> "RGB" *)
iNew  =  ColorConvert[i,  "Grayscale"]; 
(* ==> "Grayscale" *)
Posted 9 months ago

I know I can do it in one step using Wolfram Language conversion but I was asked to do it with For function for a task

This is the easiest way I can think of right now:

rgbToGrayScale[imageIn_Image, factor_ : 1] :=
    Module[{res, w, h, i, j, r, g, b, data, image = imageIn},
       res = 
               If [StringMatchQ[ImageColorSpace[image], "RGB"] && ImageChannels[image] === 3,
                     If[(Interleaving /. Options[image, Interleaving]),
                          image = Image[image, Interleaving -> True];

                     data = ImageData[image];

                     {w, h} = ImageDimensions[image];
                     res = ConstantArray[ConstantArray[0, w], h];

                     For[i = 1, i <= w, ++ i , 
                          For[j = 1, j <= h, ++ j,
                              {r, g, b} = data[[j, i]];
                                  res[[j, i]] = Mean[{r, g, b}^factor];



You can use it as follows:

rgbToGrayScale[i, 2]
rgbToGrayScale[i, 1.34]

p.s. Algebra, Computer-Based Maths, 3D Printing have nothing to do with your question. Please consider removing them.

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract