Note
Click here to download the full example code
This example opens an RGB JPEG image and writes out each channel as a separate FITS (image) file.
This example uses pillow to read the image, matplotlib.pyplot to display the image, and astropy.io.fits to save FITS files.
By: Erik Bray, Adrian Price-Whelan
License: BSD
import numpy as np from PIL import Image from astropy.io import fits
Set up matplotlib and use a nicer set of plot parameters
Load and display the original 3-color jpeg image:
image = Image.open('Hs-2009-14-a-web.jpg') xsize, ysize = image.size print(f"Image size: {ysize} x {xsize}") print(f"Image bands: {image.getbands()}") ax = plt.imshow(image)
Out:
Image size: 232 x 400 Image bands: ('R', 'G', 'B')
Split the three channels (RGB) and get the data as Numpy arrays. The arrays are flattened, so they are 1-dimensional:
Out:
Reshape the image arrays to be 2-dimensional:
Out:
Write out the channels as separate FITS images. Add and visualize header info
Out:
SIMPLE = T / conforms to FITS standard BITPIX = 64 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 400 NAXIS2 = 232 EXTEND = T LATOBS = '32:11:56' LONGOBS = '110:56 '
Delete the files created
Total running time of the script: ( 0 minutes 0.204 seconds)
Gallery generated by Sphinx-Gallery
Main Content
rgb2gray
Convert RGB image or colormap to grayscale
Syntax
Description
example
I = rgb2gray(RGB) converts the truecolor image RGB to the grayscale image I. The rgb2gray function converts RGB images to grayscale by eliminating the hue and saturation information while retaining the luminance. If you have Parallel Computing Toolbox™ installed, rgb2gray can perform this conversion on a GPU.
Examples
collapse all
Convert RGB Image to Grayscale Image
Read and display an RGB image, and then convert it to grayscale.
Read the sample file, peppers.png, and display the RGB image.
RGB = imread('peppers.png'); imshow(RGB)
Convert the RGB image to a grayscale image and display it.
I = rgb2gray(RGB); figure imshow(I)
Convert RGB Colormap to Grayscale Colormap
Read an indexed image with an RGB colormap. Then, convert the colormap to grayscale.
Read the sample file, corn.tif, which is an indexed image with an RGB colormap.
[X,map] = imread('corn.tif');
Display the image.
Convert the RGB colormap to a grayscale colormap and redisplay the image.
newmap = rgb2gray(map); imshow(X,newmap)
Input Arguments
collapse all
RGB — Truecolor image
m-by-n-by-3 numeric
array
Truecolor image, specified as an m-by-n-by-3 numeric array.
If you have Parallel Computing Toolbox installed, RGB can also be a gpuArray.
Data Types: single | double | uint8 | uint16
map — Colormap
c-by-3 numeric matrix
Colormap, specified as a c-by-3 numeric matrix with values in the range [0, 1]. Each row of map is a three-element RGB triplet that specifies the red, green, and blue components of a single color of the colormap.
If you have Parallel Computing Toolbox installed, map can also be a gpuArray.
Data Types: double
Output Arguments
collapse all
I — Grayscale image
m-by-n numeric array
Grayscale image, returned as an m-by-n numeric array.
If you have Parallel Computing Toolbox installed, then I can also be a gpuArray.
newmap — Grayscale colormap
c-by-3 numeric matrix
Grayscale colormap, returned as an c-by-3 numeric matrix with values in the range [0, 1]. The three columns of newmap are identical, so that each row of map specifies a single intensity value.
If you have Parallel Computing Toolbox installed, then newmap can also be a gpuArray.
Data Types: double
Tips
rgb2gray supports the generation of C code using MATLAB® Coder™.
Algorithms
rgb2gray converts RGB values to grayscale values by forming a weighted sum of the R, G, and B components:
0.2989 * R + 0.5870 * G + 0.1140 * B
These are the same weights used by the rgb2ntsc (Image Processing Toolbox) function to compute the Y component.
The coefficients used to calculate grayscale values in rgb2gray are identical to those used to calculate luminance (E'y) in Rec.ITU-R BT.601-7 after rounding to 3 decimal places.
Rec.ITU-R BT.601-7 calculates E'y using the following formula:
0.299 * R + 0.587 * G + 0.114 * B
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
When generating code, if you choose the generic MATLAB Host Computer target platform, rgb2gray generates code that uses a precompiled, platform-specific shared library. Use of a shared library preserves performance optimizations but limits the target platforms for which code can be generated.
GPU Code Generation
Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
GPU
Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).