How can I make a single filter using MATLAB code to get galaxy image to be negative image so that dim parts of the original image are bright, and bright parts are dark?

Two images of the same spiral galaxy are shown in Fig. The left panel shows the familiar image that you would see
if you took a picture of the galaxy through a single filter. The image on the right shows the "negative" (or "inverse")
of the image on the left. The negative image has been altered so that dim parts of the original image are now
white, and bright parts are now dark.
How can I make filter using MATLAB code the RGB galaxy image to be like that image??
I tried this code but it does not give me what I want -- the result image is not clear.
positiveImage = imread('PGC0020886.png');
negativeImage = 255 - positiveImage;
imshow(negativeImage)
_________________________
a = imread('PGC0002440.png');
d=255-a;
d=a;
for row=1:size(a,1)
for col=1:size(a,2)
d(row,col,:)=255-a(row,col,:);
end
end
imshow(d)
________________________

Respuestas (2)

Your for loop just undid what your d=255-a statement did. Simply do this
d = 255 - a;
imshow(d, []);
without the for loop at all.
Try imadjust(). From the help:
J = imadjust(RGB,[low_in high_in]) maps the values in truecolor image RGB to new values in J. You can apply the same mapping or unique mappings for each color channel.
You could also try adapthisteq() if you want the contrast stretch to be locally adaptive.

4 comentarios

Thank you Image Analyst , My code working will but image not clear like that above
this is my result, what should i do to get clearness image or Saturated image? can any function to do that?
It looks like you have either severe intensity quantization, or bad jpeg artifacts. Assuming it's quantization, and you're willing to alter the actual initial data, you can find the quantization delta, then make a noise image that's plus or minus that amount, and add it in. For example if there are gray levels only at 0, 10, 20, etc. you can make a noise image and add it in.
deltaGL = 10;
newImage = uint8(double(originalImage) + deltaGL * rand(size(originalImage)) - deltaGL/2);
Thank you my dear ,,Iam using database images from telescope hubble called EFIGI .
i try this code that you make it but i dont under stand the functioin clearly ..
whats number should me Puts her >> deltaGL = 10; >> i try to put different number but i didn't notice a difference ,,
i typed the code like that:
____________________________________________________
%read the image
rgb_image = imread('PGC0023598.png');
% convert from rgb to grayscale
positiveImage = rgb2gray(rgb_image);
%complement of grayscale image
negativeImage = 255 - positiveImage;
deltaGL = 10;
newImage = uint8(double(negativeImage) + deltaGL * rand(size(negativeImage)) - deltaGL/2);
%show the image
imshowpair(positiveImage,newImage,'montage')
____________________________________________________
is that true??
Why do you want to change the image? Just to make it look "better" than what is actually there in the original image? Is your image the original image directly from NASA? Or is it second or third hand, possibly changed along the way? Attach your PNG image if you need more help.

Iniciar sesión para comentar.

Aya Ahmed
Aya Ahmed el 18 de Feb. de 2020
Editada: Aya Ahmed el 18 de Feb. de 2020
Thank you very match @Image Analyst ..I just trying to make the image look better .
the database EFIGI that Iam use .. from site called https://www.astromatic.net/projects/efigi .
this result image that i get first before apply saturation
and this after apply saturation
What is your opinion ?

Preguntada:

el 16 de Feb. de 2020

Comentada:

el 18 de Feb. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by