根据我的问题,MosGeo回答了以下代码。我感谢他的回复。
% Load and Convert
RGB_original = imread('peppers.png');
HSV_original = rgb2hsv(RGB_original);
% Modify in HSV
HSV_Modified = HSV_original;
HSV_Modified(:,:,3)= HSV_Modified(:,:,3)*.5;
HSV_Modified(HSV_Modified(:,:,3)>1) = 1;
% Revert Back to RGB and Show
RGB_Modified = hsv2rgb(HSV_Modified);
% Note: RGB_Modified is a uint8 (not double)
% Show Results
figure('Color', 'White')
subplot(1,2,1)
imshow(RGB_original)
title('Original')
subplot(1,2,2)
imshow(double(RGB_Modified))
title('Modified')
我怀疑只转换V平面中的特定值而不是整个V平面值。 例如 如果不是
HSV_Modified(:,:,3)= HSV_Modified(:,:,3)x0.5;
我们写
HSV_Modified(HSV_Modified(:,:,3)>0.8) = HSV_Modified(:,:,3)x0.5;
输出RGB图像不如我们所期望的那样。
请澄清我的疑问。
答案 0 :(得分:1)
声明
HSV_Modified(HSV_Modified(:,:,3)>0.8) = HSV_Modified(:,:,3)x0.5;
无法正常工作,因为=
右侧的值比左侧的值多。你想这样做:
V = HSV_Modified(:,:,3);
mask = V>0.8;
V(mask) = V(mask)*0.5;
HSV_Modified(:,:,3) = V;