Filter Image such that only certain colours show

54 visualizaciones (últimos 30 días)
Carissa Lim
Carissa Lim el 16 de Jul. de 2015
Editada: eltaf kazemi el 27 de Jun. de 2021
I'm looking to filter a radar image in png, and I only want the parts of the image that are orange, yellow and red to show up on the picture. I'm then looking to calculate the distance from these orange/yellow/red parts to other points on the map. Any help greatly appreciated, thanks!

Respuestas (1)

Rohit Kudva
Rohit Kudva el 20 de Jul. de 2015
Hi Carissa,
For this task, you may convert the RGB image to HSV (Hue-Saturation-Value) image. HSV separates the image intensity from the color information. Then you can use the color information of the HSV image to filter out a specific range of colors (In your case from Red to Yellow).
If you have Image Processing Toolbox, you can use the Color Thresholder App to filter out parts of the image with specific colors. You can refer to the following link on how to use the Color Thresholder App.
In case you do not have the toolbox, you can use some basic MATLAB functions to obtain the desired image. However, you will need to know the threshold values for 'hue', 'saturation' and 'value' to filter the image for specific color range. Refer to the following script:
% read the original image
I = imread('radar_img.jpg');
% call createMask function to get the mask and the filtered image
[BW,maskedRGBImage] = createMask(I);
% plot the original image, mask and filtered image all in one figure
subplot(1,3,1);imshow(I);title('Original Image');
subplot(1,3,2);imshow(BW);title('Mask');
subplot(1,3,3);imshow(maskedRGBImage);title('Filtered Image');
Following is a sample code for 'createMask' function:
function [BW,maskedRGBImage] = createMask(RGB)
% Convert RGB image to HSV image
I = rgb2hsv(RGB);
% Define thresholds for 'Hue'. Modify these values to filter out different range of colors.
channel1Min = 0.965;
channel1Max = 0.188;
% Define thresholds for 'Saturation'
channel2Min = 0.000;
channel2Max = 1.000;
% Define thresholds for 'Value'
channel3Min = 0.000;
channel3Max = 1.000;
% Create mask based on chosen histogram thresholds
BW = ( (I(:,:,1) >= channel1Min) | (I(:,:,1) <= channel1Max) ) & ...
(I(:,:,2) >= channel2Min ) & (I(:,:,2) <= channel2Max) & ...
(I(:,:,3) >= channel3Min ) & (I(:,:,3) <= channel3Max);
% Initialize output masked image based on input image.
maskedRGBImage = RGB;
% Set background pixels where BW is false to zero.
maskedRGBImage(repmat(~BW,[1 1 3])) = 0;
You can then use the binary mask 'BW' to calculate the distance between the two set of points on the map.
I hope you find my answer helpful.
- Rohit
  3 comentarios
Naveen Sankar
Naveen Sankar el 21 de Nov. de 2017
thank you !
eltaf kazemi
eltaf kazemi el 27 de Jun. de 2021
Editada: eltaf kazemi el 27 de Jun. de 2021
very good Naveen
what is your suggestion for using other simple commands instead of creat mask function ? like 'edge' , ' 'rgb2gray' , color filters and so on....
for example i do this for my project and i want to remove noises at the end (just show me the disease on leaf)... I'm so grateful for your help with this, thanks!
close all;
clear all;
pic = imread('LEAF_0334.jpg');
I = imadjust(pic,stretchlim(pic));
Agray = rgb2gray(I);
eg = edge(Agray,'canny',0.3);
%eg_1 = bwareaopen(eg,300);
bw = im2bw(eg);
se = strel('disk',3);
bw = imdilate(bw,se);
bw2 = imfill(bw,'holes');
r = bwlabel(bw2);
subplot(3,3,1),imshow(pic),title('original');
subplot(3,3,2),imshow(I),title('adjust');
subplot(3,3,3),imshow(Agray),title('grayscale');
subplot(3,3,4),imshow(eg),title('canny');
subplot(3,3,5),imshow(bw),title('dilate');
subplot(3,3,6),imshow(bw2),title('fill');
subplot(3,3,7),imshow(r),title('label');

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by