# All about pixel colors: Grayscale and binary images 137

Posted by **Steve Eddins**,

In my previous postings on this topic, I've discussed the basic image display models in MATLAB - truecolor and indexed. The Image Processing Toolbox has conventions for two additional image display models: grayscale and binary.

### Contents

### Grayscale image display

If you pass a single argument to the toolbox's two main image display functions (`imtool` and `imshow`), they'll interpret the input as a grayscale image. Here's an illustration using a simple sinusoid:

```
theta = linspace(0, 2*pi, 256);
I = repmat((-cos(2*theta) + 1)/2, [256 1]);
h = imshow(I); % Save the handle for use below.
```

As far as MATLAB itself is concerned, this is a scaled indexed image being displayed in a figure with a grayscale colormap installed. Here are the key properties that have been set to control the image display:

`get(h, 'CDataMapping')`

ans = scaled

The toolbox convention is that, for floating-point images, 0 is displayed as black and 1 is displayed as white.

`get(gca, 'CLim')`

ans = 0 1

map = get(gcf, 'Colormap'); map(1:5, :) % Display the first few colormap colors

ans = 0 0 0 0.0039 0.0039 0.0039 0.0078 0.0078 0.0078 0.0118 0.0118 0.0118 0.0157 0.0157 0.0157

`imshow` (and `imtool`) handle all these details for you.

### Controlling the grayscale display range

`imshow` and `imtool` allow you to override the conventional display range and specify your own black and white values. You do this by providing
a second input argument, a two-element vector containing the black and white values. In the call to imshow below, 0.4 (and
any lower value) gets displayed as black. The value 0.6 (and any higher value) gets displayed as white.

imshow(I, [0.4 0.6])

### Binary image display

The other Image Processing Toolbox image display model is the binary image. If you supply a single input argument that is
logical, then `imtool` and `imshow` (as well as many other toolbox functions) interpret that input as a binary image.

```
bw = imread('text.png');
islogical(bw)
```

ans = 1

h = imshow(bw);

### Relevant toolbox documentation

The Image Processing Toolbox Users Guide has a section called "Image Types in the Toolbox." This section describes the image types binary, indexed, grayscale, and truecolor, and it explains important dynamic range conventions as well. This is essential information for you to know in order to use the toolbox effectively.

Get the MATLAB code

Published with MATLAB® 7.2

## 137 CommentsOldest to Newest

**1**of 137

Hi Steve,

I got a 3D volume data. I ‘slice’ a vertical crosssection out of the vol. data. I have a colormap so that the sliced image is displayed in color. How can I show the image using truecolor? i.e., get RGB value for each pixel. The reason to do this is to add a ‘hue’ value on the RGB. The hue is like an error bar, the bright spot means small error. dark spot means large error. thanks for your answer.

yingcai

**2**of 137

Yingcai – Take each value from your data set, scale it appropriately to get the colormap index, and then get the RGB colors for that data set value from the colormap. Look at this post to see how the scaling works.

**3**of 137

How do I get the average intensity level of a structure in an index or rgb image?

**4**of 137

Mustapha – 1. Convert to grayscale first (ind2gray or rgb2gray). 2. Find the pixel values corresponding to the structure. 3. Call mean.

I = rgb2gray(rgb); structure_pixels = I(structure_mask); mean(structure_pixels)

**5**of 137

Hi Steve,

I need vertical sine on 480×480 tif file.

How can I do it ?

the frequency should be variable also the gray level of backround and sine line.

Thanks in advance,

Ron

**6**of 137

Ron – see this post on synthesizing images.

**7**of 137

Hi Steve

I have an image of a animal brain with a small tumor in the brain. I want to retain the entire image in gray scale and colormap only the tumor region in the brain with colorbar ranging from 0 to 100. How to proceed with this?

**8**of 137

Hekmat – I’ll assume you have three images: a grayscale image (I), an indexed image (x,map), and a mask image indicating the tumor location (mask). Then you might proceed like this:

% Initialize red, green, and blue components to be % the same as the grayscale image. red = I; green = I: blue = I; % Convert the indexed color image to rgb. % Convert it also to uint8, assuming that's what % the grayscale image is. rgb = im2uint8(ind2rgb(x,map)); % Within the masked region, assign pixels % from the color image to the red, green, % and blue components. red(mask) = rgb(:,:,1); green(mask) = rgb(:,:,2); blue(mask) = rgb(:,:,3); % Combine the red, green, and blue components % into an RGB image. rgb_out = cat(3, red, green, blue);

**9**of 137

Dear Steve

Thanks a lot , I think, this will help a lot.

Hekmat

**10**of 137

Hi Steve

I am taking a picture on a CMOS camera that is being transmitted wireless to the PC through COM port 4 and the data I am receiving are pixel values (8 bits for one pixel). I am not sure what format it is (JPEG or BMP?), but I’m wondering if MATLAB can read these values and save it as a picture format

Thank You

Pradeepan A.

**11**of 137

hi,

I am also facing same sort of thing were i am taking image from cmos data. i have that image data in my memory what i am received is an 8 bit data. I wan to implement connected component on the data.i am wondering how to do it.

**12**of 137

As per your suggestions(replied on March 28th, 2007 at 2:34 pm)

, I tried to work on this, it is giving following errors

what does it mean?

??? Index into matrix is negative or zero. See release notes on changes to logical indices.

Error in ==> C:imtry2.m

On line 57 ==> out_red(bw)=rgb(:,:,1);

Thanks

hek

**13**of 137

It probably means your `bw` variable isn’t a logical matrix.

**14**of 137

thanks steve..

**15**of 137

Pradeepan and Naven – The Image Acquisition Toolbox offers a way to get camera data via framegrabber, USB, or IEEE 1394 (FireWire) ports. MATLAB has a serial port interface that you might be able to use.

**16**of 137

Hello,

do you know if it is possible to use the slice function with rgb data and transparency ?

thx

**17**of 137

Thomas – From the doc, it looks to me like slice is intended for volumetric data, not RGB image data.

**18**of 137

Hi steve

I have an avi video measureing tumor kinetics.I want to find the average intensity of each pixel in the tumor over time specifying the ROI.

**19**of 137

How should i program this?

**20**of 137

i want to copy pixel coordinates and pixel intensity from pixelregion to text file . although i can copy and paste it but it is taking too much time because of large number of pixels. Is there any way to copy and paste it in text file by any single command and easy way method?

**21**of 137

Sudhanshu – You can use the MATLAB `clipboard` function to copy values from a matrix to the clipboard. Here’s an example:

>> I = imread('cameraman.tif'); >> clipboard('copy', I(1:3,1:3))

copies this string to the clipboard:

[156 159 158;160 154 157;156 159 158]

**22**of 137

steve,

I am processing sea floor in a software “poseidon” where i have got intensity values of backscatter data, i mean, acoustic waves. i have got the pixel intensity of all the pixels in a textfile and its an array of very high order(>1000). now i want to do some statistics in matlab like getting proability distribution function. so i will have to read that textfile first and then what i should do next.please tell me in detail

**23**of 137

Sudhanshu – I can’t tell you in detail what to do, but I think I can give you a pointer to get started — take a look at the `textscan` function.

**24**of 137

that part of reading textfile i have al;ready did bt i want to know about this proability distribution of the array..its urgent, please tell em soon if u can.

**25**of 137

Sudhanshu — You can get a rough idea of the distribution of values in the file by using the `hist` function. See the Statistics Toolbox for tools to estimate probability density functions.

**26**of 137

hi steve,

jst clear my doubt.

i have a matrix and i want to draw a 2-D graph . X-axis will be frequency and y-axis will be elements of the matrix. In short, i want to know the frequency of an element of the matrix..and the matrix is of high order.please tell me

**27**of 137

sorry, i want x-axis be the elements of the matrix and y-axis frequency means how many times that element of the matrix is there in the matrix

**28**of 137

Sudhanshu—Use `hist`.

**29**of 137

Hii Steve, I am working on image RGB vaues…I want to find out the RGB values of each and every pixel of the image an I want to write those values to a file. For example if an image of 1024 resolution…. I want to find out the RGB values of every pixel…Hw can I do that…I wrote a small code for that but it is not working….Plzzz help????

**30**of 137

Sid—RGB images are simply M-by-N-by-3 arrays in MATLAB. You obtain pixel values by indexing into the array. Here’s how you would obtain the red, green, and blue components for the pixel on row 34, column 25:

red = rgb_image(34,25,1); green = rgb_image(34,25,2); blue = rgb_image(34,25,3);

**31**of 137

hi steve i m studing in final year of BE in electronics and communication and i m working on noise reduction in images though this topic is very simple n easy for you but for me it is too hard.but when i visted to your site i get lot of knowledge about matlab.thanks

**32**of 137

Hi Steve,

hope you can help me with this:

I have an 2 images

(1) the data image I with several regions of interest (ROIs) (2) a mask with the locations of the ROIs.

I label the ROIs (using “[mask,numObjects] = bwlabel(x,4);”).

Now i would like to know for each ROI the pixel with the largest intensity and the x/y

coordinates of this pixel in the data image. I think i know how to get the maxium intensity pixel (find(max(…)). But how to find it’s coordinates in the original data image?

**33**of 137

Mat—That’s a great question. You can do something like:

L = bwlabel(x, 4); s = regionprops(L, 'PixelIdxList'); % Find location of maximum-intensity pixel in 1st region: [maxval, maxidx] = max(I(s(1).PixelIdxList)); % Find linear index of maximum-intensity pixel: idx_list = s(1).PixelIdxList; i = idx_list(maxidx); % Convert linear index to row-column coordinates: [r,c] = ind2sub(size(I), i);

**34**of 137

how to program a wireless camera controller to computer?

**35**of 137

Fr—I have no idea.

**36**of 137

Hi Steve,

I have a matrix J (250×200) which contains several ROIs (equidistinaly spaced and about 6×5 in size) with non-ROI pixel values set at 0. 1) I would like to find the minimum pixel intensity value within each ROI in J and 2)place that minimal value in the same x,y coordinate in a new 250×200 matrix (all other pixel values in the new matrix should be 0). Hope you can help.

**37**of 137

hey Steve

I figured it out using the imregionalmin( ) function.

**38**of 137

Stev—Sounds good.

**39**of 137

Hi Steve,

I have an image of 4 objects and a set of x-y axis. I have filtered the image so that all the objects and the axis are white and the background is black. I would like to be able to locate the white objects and attached a set of coordinate axis to each object with respect to the axis in the image.

any ideas?

thanks!

**40**of 137

Garry—You can use `bwlabel` to identify the objects, and then use `regionprops` to compute the centroid of each one. I don’t have any suggestions about the “attaching a set of coordinate axis to each object” part of your question. You can probably draw the necessary lines using MATLAB graphics functions.

**41**of 137

Hello Steve,

I have a fingerprint image and I want to mark or color

a specific pixels,each pixel has a different meaning,

that’s why I want to show it,

but I don’t know how can I make this marks.

I hope you can help me.

Regards.

**42**of 137

Abrar—You change the color of an image pixel simply by assigning a new value to it.

% I is uint8 image matrix I(50,100) = 255; % Make pixel (50,100) be white.

You might also want to look at my post about the imoverlay function on the MATLAB Central File Exchange.

**43**of 137

Hi Steve,

Thanks for your reply,

but this way will not be efficient, because its a binary image and makeing this pixel white will not be clear in the pictuer,

so I need to mark my minutiae by useing star (*) or somthing else,

could you help me in this.

**44**of 137

Hi Steve;

i have a gray valuse image(768×1024), it contains black seeds at the center on the gray background, and rest of the image outside gray value is black (three different regions). i am trying to extract black seeds only in the uniform white

background. could you please help me out?

Damodar

**45**of 137

Abrar—Try superimposed plot markers on your image using `hold on` and `plot`.

**46**of 137

Damodar—You might find the Image Processing Toolbox functions `graythresh` and `imclearborder` to be helpful.

**47**of 137

thankx, Steve.

**48**of 137

I have 2 grayscale image, and I want to display both of them on the same figure. one of them will be a colormap(like imagesc do) while the other one as grayscale. It is similar to the Hekmat’s problem, but I dont have rgb images for the mask regions and I want to use what imagesc do for those masked regions. Is there any way to implement a imagesc operation on a ROI of grayscale image? Thx.

**49**of 137

erhan—Figures can have only one colormap at a time. You will probably need to convert both images to truecolor format and do the pixel scaling arithmetic yourself.

**50**of 137

Thx Steve.

**51**of 137

Hi Steve, thx for your previous suggestion, it works fine. But I have another problem( with the colorbar function). Although all my pixels are in the range of [0-1], when I use colorbar option of Matlab, my colorbar seems to be between [0-64] for 3-channel image. Do you have any idea about this? Thx

**52**of 137

Erhan—MATLAB displays a three-channel (truecolor) image independently of the figure colormap, so using colorbar doesn’t really work. Besides, if you have three channels, then you have three numbers per pixel, so what scale should be plotted on a colorbar anyway?

**53**of 137

hi steve .. we are beginners in image processing .. i have an image 200*200. i need to divide the image into 5 * 5 size to get 40 blocks . and need to find the average intensity of each of the block.. can u help me out in this..

**54**of 137

Preethi—You might find the function `blkproc` to be helpful.

**55**of 137

Hi Steve,

I know this must have a simple answer but I can’t find it. I have an RGB image. For each pixel in the image, I want to assign a height value. So it is actually an m x n x 4 matrix (because of R, G, B, height). I am wondering how to plot this so that the 3D image will elevate each pixel to the assigned height in the Z axis but retain the R,G,B truecolor value. Thank you so much for your help.

**56**of 137

Kellie—Look in the MATLAB documentation about displaying surfaces.

**57**of 137

Hi Steve,

how can i cut out a ROI that is specified by a binary mask?

My raw data consists of image stacks (50 images, 1392×1040). After inspection i select a ROI somwhere in the first image (e.g. a 300×300 pixel square somwhere in the image). Now i’d like to cut this ROI from every image in the stack and use these cut-outs to form a new, reduced stack of 50 images, 300×300.

**58**of 137

Tom—Extracting a rectangular subimage in MATLAB is just a matter of indexing.

cut_out = A(r1:r2, c1:c2);

If your image stack is represented as a 3-D array, you could do the indexing for all the images in one step:

cut_out = A(r1:r2, c1:c2, :);

**59**of 137

steve, i’ve try to divide the 100*100*3 (RGB image) into 3×3 size block..i know to process block image is by using blkproc, but how about color images? can we use blkproc function too?

**60**of 137

Muchacha—No, blkproc doesn’t support that. You’ll have to write the block loops yourself.

**61**of 137

Oh too bad..

I’ve no idea how to do it.. :(

is there any suggestion on how to do it?

i mean, what is the first step to do..

where i can find the reference?

**62**of 137

Muchacha—You really just need for loops and ordinary matrix indexing to extract the submatrices (blocks). If you’re not that familiar with MATLAB programming, you might want to go through the Getting Started Guide in the MATLAB documentation.

**63**of 137

ok..thank you steve.. i’ll try that.. :)

**64**of 137

Dear Steve,

Here is my problem (I am new at Matlab):

I have a binary tif image showing an irregular line.

Since this is a binary image, the pixels of this line have Gray levels of = 1 and the surrounding background pixels have gray level values of = 0.

This line is thick which means that within each column of the image array, there are 2 or more y coordiantes that have pixels with gray levels of 1 (so the line is more than 2 pixels thick).

What I need is first to transform this thick line into a thin line (one pixel thick), then, I need to get the x,y values of this thin line in order to be able to plot it as a graph.

I think that the best way to make this line thinner

(1 pixel thick), I would have to do the following: for each column (x value) to average the y coordinates that contain gray levels of 1 (the line). This way, I will be able to get a new image array with the same x values but with new y coordinate values, one y point for each pixel that contains GL=1.

Once doing this transformation, I will need to figure out how to get the new x,y coordinates (of this new thin line), in order to plot them in excel, as a graph.

Please help !

Thank you,

Ed

**65**of 137

Ed—Try `bwmorph` with the `'thin'` option, as well as `bwboundaries`.

**66**of 137

I need help in converting rgb to gray of a image taken in black and whit mode of a IR camera whose specifications are 640 480 3. Please help as soon as possible

Regards

Arvind

**67**of 137

Arvind—See `rgb2gray`.

**68**of 137

Dear Steve,

Thanks for the “thin” option tip. I still have problems with this issue. The skeletonization option created multiple vertical lines in addition to the horizontal line.

I am therefore trying to solve this issue in a different way, as follows: my image contains a thick dark line (GL=1), surrounded by a white (GL=255) background.

By using:[x,y]=find(a<255) I was able to obtain the XY coordinates of my line. Let’s say I got the following array (truncated, for illustration purposes) :

b =

2 2

2 1

2 2

3 1

3 2

3 3

Let’s call the left column “X” and the right column “Y”.

I need to calculate the mean of all these “Y” values that have a similar “X” value. So, for X=2, I need to average

the following y values: 2,1,2. For X=3, I need to average y the following y values: 1,2,3. If I am able to do this

automatically, for a longer array, then I will reduce the thickness of my line, to one value (the average), per X coordinate.

Many thanks in advance !

Ed

**69**of 137

Hi Steve,

I have solved my line problem (above) first by using the “find” function to get the xy coordinates, then I created a “for” loop with an “if” condition.

Thanks anyway,

Ed

**70**of 137

Ed—I’m glad to hear that you got it to work.

**71**of 137

Hi Steve,

let Xbin be a binary image. When i write using .jpg format it automatically gets converted into grayscale because by default bitdepth of jpg is gray-scale my question to you:

Q) How imwrite(Xbin,’file.jpg’) is converting binary image into grayscale when and with what algorithm

**72**of 137

Lion—You can see for yourself exactly what `imwrite` is doing by typing:

>> edit private/writejpg

**73**of 137

hi steve,

i have a binary image.How can i display the image in matrix form and how can i calculate the total numbers of ‘0’ and ‘1’ in matrix?

thanks

**74**of 137

Sam—To display the image in matrix form, simply type its variable name at the command prompt and leave off the semicolon as you might do with any other matrix in MATLAB. Use the `sum` function and the `~` operator for calculating the number of 0s and 1s. You might want to look at the Getting Started section of the MATLAB documentation.

**75**of 137

Dear Steve,

I just found this website like 2 days ago. It seems great! I have a pretty simple question, probably. So if I want to take an RGB image and find the average pixel intensity, then is converting it to grayscale the way to go? Does grayscale accurately capture the intensity of a truecolor image?

Thanks

**76**of 137

Alex—It’s not really a simple question. Many RGB color spaces do not uniquely define a color, because they are device-dependent spaces. That is, they depend on the physical characteristics and settings of the device, which might be a monitor, a camera, a scanner, etc. Also, when some people talk about “intensity” they expect the term to refer to a physical measurement of light intensity. Others use the term more loosely. So when you ask “Does grayscale accurately capture the intensity of a truecolor image?”, I have to respond “it depends.” It depends on what you mean by “grayscale,” what you mean by “accurately,” what you mean by “intensity,” and what you mean by “truecolor.” I’m sorry to give a less-than-completely-helpful answer, but these issues are why I am often heard to mutter that “color science makes my brain hurt.”

**77**of 137

Hi Steve,

I have a problem of converting a ring shape extracted from an image into a rectangular strip. I want the values of the ring to be mapped to the values of the rectangular strip.

Thnx

**78**of 137

Tina—See the “Exploring a Conformal Mapping” demo on the Image Processing Toolbox examples page.

**79**of 137

Thanks a lot for your reply, Steve. Both here and to my other question in the “truecolor and indexed images” section.

**80**of 137

Hi Steve,

I am trying to calculate the threshold value to convert a grayscale image (~5000 pixels x 3600 pixels) to a binary image. I know the target value 21% of the area, so I am iterating to find the corresponding luminescence. I am finding however that the range is too small to give me the right answer. Is there a way to check the grayscale pixel values instead, I know the cutoff is the value 187 in grayscale (from ImageJ), but I can’t get matlab to find this using the Luminescence threshold of 0 to 1, it will find 20.6% and then jump to 21.4% no matter what the luminescence increment is.

Thanks,

Mike

**81**of 137

Michael—There’s a great deal about your question that I don’t understand … Why do you need to calculate a threshold value that you already know? What does “21% of the area” mean? What is your definition of luminescence and why are you using it? What is the “it” that’s jumping from 20.6% to 21.4%?

So let’s start here: What’s wrong with:

bw = my_image > 187;

**82**of 137

Hi, Steve

I have a binary image with only white and black.

I would like to calculate the white area vs the total.

These white area are irregular shaped.

How can I do it?

**83**of 137

Gene—

sum(bw(:)) / numel(bw)

**84**of 137

how to convert an black and white image into pixel values in matrix form and again how to reconvert matrix form to black and white image.

**85**of 137

Prasad—In MATLAB, grayscale and binary images are already represented as matrices.

**86**of 137

hi steve,

i want to count the no. of white blocks(50*50 pixels) in my black and white photo.

can u please help me out?

**87**of 137

Samarth—Use `bwlabel`.

**88**of 137

Hi Steve,

I saw your reply to Hekmat and seems like I had the same problem. But I was wondering more why did MATLAB do away with

imoverlay

that was around in the old versions. Is there a replacement for it? I am now using MATLAB 2008b with the ImageProcessing Toolbox and the absence of imoverlay seems unfortunate. To summarize my problem I have 2 grey scale images, one of which I want to allocate the color red and save the two together as RGB.

Cheers,

Chaitanya

**89**of 137

Chaitanya—`imoverlay` was never in MATLAB or the Image Processing Toolbox. I wrote this function specifically for a blog post, and I contributed the function to the MATLAB Central File Exchange. You can still get it there.

**90**of 137

i have an rgb image and i would like to binarize it so that yellow colours are white and non-yellow are black. how do i do this using your binary method?

**91**of 137

Le—The Image Processing Toolbox has a color-based segmentation example that you might find helpful.

**92**of 137

hey steve,

Is there any direct function that returns the intensity value of an image?

thank you.

**93**of 137

Mansi—Please define what you mean by “intensity value of an image.”

**94**of 137

i mean the intensity value of a pixel in an image..

i hav the cordinates of the pixel….but cannot calculate the intensity of that pixel.

thank you.

**95**of 137

Mansi—An image is represented in MATLAB as a matrix. Just use ordinary matrix indexing to extract the value of a pixel: A(r,c).

**96**of 137

i am working on number plate extraction in MATLAB. i hac converted an image from rgb to HSI….now i need to convert the intensity map to a binary map..how do i do tht?

**97**of 137

Madiha—Threshold the intensity image using the `>` or `>=` operator.

**98**of 137

Hi Steve,

Let me know how to calculate average pixel values in a grey scale image in a certain pixel region specified using the imtool. I want to calculate the average pixel values in each rectangle marked area as I have an image with different levels of greyness in it starting from black to white. Cheers and thanks for the help. Santosh.

**99**of 137

Santosh—To compute the mean of a rectangular area of a grayscale image I:

result = mean2(I(r1:r2, c1:c2));

**100**of 137

I read a color image and convert it to grayscale. When I dispaly the grayscale image it is in red and blue, not in the shades of gray. Why is that? How can I display the grayscale image in the shades of gray?

**101**of 137

Asanka—I assume from your description that you are displaying the image using the MATLAB `image` function. This function does not supply a colormap automatically, so typically the default figure colormap gets used. Use the `colormap` function to supply a gray-scale colormap, or use the Image Processing Toolbox display functions `imshow` and `imtool`.

**102**of 137

i want to find the position and number of pixels corresponding to any intensity value in a gray scale image and plot them…

**103**of 137

Shankara—Find position and number:

[y, x] = find(im == val); num = numel(y);

As for plotting, your options are many. See that MATLAB graphics doc.

**104**of 137

thanks steve

**105**of 137

Hey Steve,

I have a tif image and would like to see the pixel values from an area.I have used the imtool and see them but I don’t know how to get them and save them.Can you help please?

**106**of 137

Hi,

I am trying to apply the thinning algorithm in order to get an image which is 1-pixel wide.

My image is in the form of 0’s ans 1’s. How do I convert the entire matrix to 0’s and 255’s respectively?

Thanks,

AGD

**107**of 137

AGD—I don’t know why you would have to convert 1s to 255s in order to apply a thinning algorithm. But you could use:

B = im2uint8(A);

or

B = A; B(A ~= 0) = 255;

**108**of 137

Dear Steve:

I am currently a Professor in Image Processing and a big fan of your blog.

My question is how to use adapthisteq function iwth bimodal distribution. As I have fingerprint images, I would like to enhance it using adapthisteq.

Thanks.

M Asmat Ullah Khan

**109**of 137

Stella—Images are just matrices in MATLAB. You extract pixel values using matrix indexing:

p = A(15,20); % pixel value on 15th row, 20th col sub = A(15:20, 20:25) % 5-by-5 subimage

**110**of 137

Asmat—What’s stopping you? What else do you need to know?

**111**of 137

How to divide the grayscale value of an image ?

**112**of 137

Uma—Use `./`

**113**of 137

Hi,

I’m encountering a problem reading .tif 10 bit images, matlab reads the bottom half of the image wrong ” it reads only three raws and keep repeating those 3 rows for the entire second half of the image.

any idea why?

Thanks,

**114**of 137

Amir—How do you know the image file really contains what you think it does?

**115**of 137

Steve,

I am a college freshmen and brand new to MATLAB. As an extra-credit problem for my class we have an image which we must find the hidden riddle and answer it. I believe the image has some pixel layers removed, using the command , is there any way to put layers back on top? Thank you,

Billy

**116**of 137

Steve, I took the images with High speed camera we use in our lab, and I open these files with other softwares.

**117**of 137

Amir—In that case, the best to proceed is to contact MathWorks technical support and provide them with a sample file. It would also be helpful to provide a screen shot, if possible, of what the image is supposed to look like.

**118**of 137

Steve, Thanks.

I’ll let you know if anything interesting.

**119**of 137

Billy—I don’t understand what you mean by “pixel layers removed.” You might want to take a look at this post for a simple way to hide and reveal information in an image.

**120**of 137

Steve,I send you a comment here but still didn’t get any reply yet.I did not see my comment posted here to.

**121**of 137

Tasha—I only accept comments that are relevant to the particular blog post or are questions or comments about the blog itself. Also, for comments that I do accept it often takes me several days (or even a week or more) to respond. That’s because in addition to running this blog I have a real job. ;-)

**122**of 137

steve, i want to convert image after segmentation using thresholding to RGB image

each pixel if the value of bw image>1 (white) will be set in pixel value @ RGB Image(i,j)

if BW(i,j) T

BW(i,j) = rgb_image(i,j)

the code:

[M,N] = size (BW) ; [M,N] = size (rgbImg); for i=1:i < M for j=1:i:i T d(i,j)= rgbImg; else d(i,j)=0; end end end

but it doesn’t work??

how can i process each pixel value into rgb image??

**123**of 137

sorry steve this is the code

[M,N] = size (BW) ; [M,N] = size (rgbImg); for i=1:i < M: i++ for j=1:j T d(i,j)= rgbImg(i,j); else d(i,j)=0; end end end figure, imshow(d(i,j));

**124**of 137

Ika—Well, the code as you’ve posted it doesn’t work because it’s not valid MATLAB syntax. The for-loop expressions look more like C, and you’re missing an “if” to go along with that “else.” I can’t quite tell what your real intent is with this code, so I can’t give you better advice.

**125**of 137

Hi,

I have a problem in counting number of black pixels and white pixels in binary image. pls send me the code or function in matlab

**126**of 137

Kavitha—

num_white_pixels = sum(bw(:)); num_black_pixels = sum(~bw(:));

**127**of 137

Hi Steve,

I have a problem with segmentation. Since I was not able to post my comment in your cell segmentation blog, I am posting it here. I hope it is fine.

I am trying to segment protein accumulations within the embryo. Please have a look at image 1 in the link.

I am using the following code to segment and extract protein accumulations but I am unsuccessful so far and I have problems in the final watershed transformation.

% read in image (see image 1 in link)

I = imread(‘Proj of unc60_rnai_nmy2gfp_3s_14hr0000.tif’);

se = strel(‘disk’,6);

se2 = strel(‘disk’,2);

It = graythresh(I);

I1 = im2bw(I,It);

I2 = imdilate(I1,se);

I3 = I2-I1; % apply external gradient to identify embryo

I4 = imerode(I3,se2);

I5 = imfill(I4,’holes’);

In = normalize(I);

Ifin = I5.*In;

% the above steps assigns every pixel outside the embryo to zero (see image 2 in link)

mask = imextendedmax(Ifin,0.5);

% It already looks like it has segmented well but I would like to further use watershed to remove protein accumulations that are connected by a small number of pixels (see image 3) I am fine until this step. I have problems after this.

I complement the original image and use imimposemin and watershed on it. But this is what I get (see image 4)

Icomp = imcomplement(Ifin);

Imod = imimposemin(Icomp,mask);

l = watershed(imod);

Please help me.

Here is the link where you can find all the images

http://www.mpi-cbg.de/~naganath

Thanks

**128**of 137

Sorry I used the wrong word in the following line in my previous post

% It already looks like it has segmented well but I would like to further use watershed to “segment (and not remove)” protein accumulations

**129**of 137

Sundar—I don’t recall seeing this comment submitted before, but it is certainly off-topic for this post. In any case, I don’t have time right now to provide individual consulting on image segmentation problems. You might consider posting your query to the MATLAB newsgroup; there are some knowledgeable people there who often chime in on image processing questions. You might consider providing your sample images in a more common format that’s easily displayable in a browser, such as JPEG or PNG. Many people will not be able to diosplay your .eps files.

**130**of 137

Thank u very much steve. The code u sent worked .

**131**of 137

Dear Steve,

I have got a gray scale image (MRI image) that has values between 0 and 1, I am interested in displaying the pixels in different colors such as

pixels with values 0-0.3 in yellow

pixels with values 3.1-5 in blue

…. etc

Many thanks

Ali

**132**of 137

Ali—Try using the function `grayslice` with the second syntax.

**133**of 137

Hi Steve,

i have a binary image. how to display it in the 10 by 10 matrix form?

i tried by giving simply a variable name but there are so many no. of rows & columns displayed.

please help me.

**134**of 137

Kaly—Pick which pixels you want to display. For example, display the upper-left 10-by-10 block:

bw(1:10, 1:10)

**135**of 137

thanks a lot Steve.

**136**of 137

Hi steve I posted a question about finding distances between binary objects. I thought it would be relevent as aspects of binarisation are being discussed here using Matlab ??

**137**of 137

Shahnawaz—I did not think your question was relevant to the topic of this post. This blog is not a general help forum; comments should be relevant to the posts.

## Recent Comments