basic Image processing problems

2 visualizaciones (últimos 30 días)
miskie
miskie el 27 de Feb. de 2011
I am supposed to write function that does this:
gamma(in_image, g) -Return an image in which the intensity of each pixel of in_image is first readjusted to the range [0 1], then raised to the power 1/g, and finally rescaled to [0 255].
my function , which does not work
function [ pic ] = gamma( in_image,g )
i=imread(in_image);
h=i/255 % scales brightness values to be between 0 to 255
h=h^(1/g)% raise to power of 1/g
h=h*255 % scales back to 255
pic=imshow(h); %shows image
and another problem that does not work binarize(image) -Return an image in which all values less than 127 become 0, and all greater than 128 become 255.
function [ pic] = binarize( image )
i=imread(image);
if i<127 i=0
elseif i>128 i=255
else i=i
pic=imshow(i);
I dont see why it won't work; ive been gettin really mad at this stuff,

Respuestas (3)

Walter Roberson
Walter Roberson el 28 de Feb. de 2011
Hint: you are running in to problems with your gamma() function because you are not being careful about your data types. imshow() of an array which of double precision data type expects the data values to be in the range [0,1], but imshow() of an array which is of uint8 data type expects the data values to be in the range 0 to 255.
This problem extends to even when you read the image: you don't know before hand whether you are going to get values in the range [0,1] or in the range 0 to 255 (uint8) or in the range 0 to 65535 (uint16)

Bjorn Gustavsson
Bjorn Gustavsson el 28 de Feb. de 2011
OK, here's the things I'd change:
h=i/255; %->
h = (i - min(i(:)))/(max(i(:)-min(i(:))));
and further I guess that you should read up on the differences between .*, *; ./, / and .^ and ^. And then change:
h = h^(1/g); %->
h = h.^(1/g);
HTH, Bjeorn

matar maoz
matar maoz el 28 de Feb. de 2011
I am giving you a solution for your second problem.
you have things you did wrong with your code, but I tried to stick to it as much as possible so you could see what to change
clear clc close all i=imread('cameraman.tif'); figure imshow(i) [numr,numc]=size(i); for rows=1:numr for culls=1:numc
if i(rows,culls)<127 i(rows,culls)=0;
elseif i(rows,culls)>128 i(rows,culls)=255;
%else i=i----------------->>that row is doing nothing end end end
figure imshow(i)
Matar Maoz Afeka college of engineering

Categorías

Más información sobre Image Processing Toolbox en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by