Dark image separation
All you need to do is masking on your v we remember and image is a [rows,cols,layers] matrix, where the layers are Hue=1,saturation=2,intensity value=3

We then create a mask (array of 0s and 1s). For example your first range would be

v1 = (hsv_im(:,:,v_idx) &lt;0.3);


we are taking the all rows, all columns, of layer v, and if the value is &lt;0.3 make it 1, otherwise make it 0. Now to see only those pixels we can multiply the original value array by our mask.

hsv_im(:,:,v_idx) = v0.*v1_mask;


As you recall any value >0.3 was 0 in our mask, so all the other areas will be blacked out.

here is a full example

im = imread('flower.jpg');
hsv_im = rgb2hsv(im);
v_idx =3; 

v0 = (hsv_im(:,:,v_idx));    %the original
v1_mask = (hsv_im(:,:,v_idx) &lt;0.3);
v2_mask = (hsv_im(:,:,v_idx) &lt;=0.3 &amp; hsv_im(:,:,v_idx) &lt;0.75);
v3_mask = (hsv_im(:,:,v_idx) &gt;= .75);

%plots the images
figure(1);
subplot(2,2,1);imshow(hsv2rgb(hsv_im));title('original')

hsv_im(:,:,v_idx) = v0.*v1_mask;
subplot(2,2,2);imshow(hsv2rgb(hsv_im));title('0.00&lt; v&lt;0.30')

hsv_im(:,:,v_idx) = v0.*v2_mask;
subplot(2,2,3);imshow(hsv2rgb(hsv_im));title('0.30&lt;=v&lt;0.75')

hsv_im(:,:,v_idx) = v0.*v3_mask;
subplot(2,2,4);imshow(hsv2rgb(hsv_im));title('0.75&lt;=v&lt;1.00')

%plots the masks
figure(2)
subplot(2,2,1);imshow(v0);title('original v')
subplot(2,2,2);imshow(v1);title('0.00&lt; v&lt;0.30 mask')
subplot(2,2,3);imshow(v2);title('0.30&lt;=v&lt;0.75 mask')
subplot(2,2,4);imshow(v3);title('0.75&lt;=v&lt;= 1  mask')