回答:
RGBとHSIモデルは、異なる色空間である - (約)同じ色の異なる数学的表現。
画像をコンピュータモニタに表示するには、sRGBカラーモデルに変換する必要があります(他のモデルもサポートされています)。しかし、HSIカラースペースで画像を表示することはできません。
備考:RGBとsRGBの違いについて心配する必要はありません。 Matlabは、イメージがsRGBカラースペースにあると仮定します(RGBとsRGBは等しいとみなされます)。
チェック以下のコード:
RGB = imread('peppers.png');
RGB = double(RGB)/255; %Convert pixels range [0, 255] to range [0, 1].
HSI = rgb2hsi(RGB); %Convert RGB to HSI
RGB2 = hsi2rgb(HSI); %Convert HSI back to RGB
max(abs(RGB(:) - RGB2(:))) %Calculate maximum absolute difference.
差が8.8818e-16
結論:HSIにRGBを変換し、バック、色を変更does't。コードを実行するための
、ダウンロード:2番目の質問にhttps://www.mathworks.com/matlabcentral/fileexchange/53354-hsi-%3C-%3E-rgb-image-conversion-tools
回答:RGB HSIへの変換がlinear transformationではないので
等しくないが、正しいです。
RとGとBをフィルタリングすることは、H、SとIのフィルタリングと同じではなく、RGBへの変換(操作の順序の問題)です。
「平均フィルタリング」は明確に定義されていません。
私は、各カラーチャンネルで別々に適用された簡単な3x3平均フィルターを意味すると仮定します。
参照:H ttps://www.mathworks.com/matlabcentral/answers/49226-how-to-apply-a-mean-filter-for-3x3
チェック次のコード:
RGB = imread('peppers.png');
RGB = double(RGB)/255;
HSI = rgb2hsi(RGB);
h = 1/9*ones(3);
%Filter RGB and HSI images (convolution of each color plane with h).
filtRGB = imfilter(RGB, h);
filtHSI = imfilter(HSI, h);
%Convert filtered HSI to RGB format.
filtRGB2 = hsi2rgb(filtHSI);
max(abs(filtRGB(:) - filtRGB2(:)))
差が0.7774
結論です:RGB色空間とHSI色空間をフィルタリングが等しくありません。
違いはありますか?
%Convert filtered RGB to HSI
filtHSI2 = rgb2hsi(filtRGB);
diffH = abs(filtHSI2(:,:,1) - filtHSI(:,:,1));
diffS = abs(filtHSI2(:,:,2) - filtHSI(:,:,2));
diffI = abs(filtHSI2(:,:,3) - filtHSI(:,:,3));
figure;imshow(diffH);title('diffH');impixelinfo
figure;imshow(diffS);title('diffS');impixelinfo
figure;imshow(diffI);title('diffI');impixelinfo
diffH:
![enter image description here](https://i.stack.imgur.com/ravT4.jpg)
差分:
![enter image description here](https://i.stack.imgur.com/NcxGp.jpg)
diffI:
![enter image description here](https://i.stack.imgur.com/ALlZ0.jpg)
結論:
H、Sの小さな差で大きな差があります〜 dの違いはありません。
私は違いがあるのは、I=(R+G+B)/3
です。
I
変換は線形変換(および畳み込みはオルソ線形変換)です。
例:
FILTR =(R00 + R01 + R02 + R10 + R11 + R12 + R20 + R21 + R22):
最初
r00 r01 r02 g00 g01 g02 b00 b01 b02
r10 r11 r12 g10 g11 g12 b00 b01 b02
r20 r21 r22 g20 g21 g22 b00 b01 b02
フィルタ3×3画素を想定します/ filtB =(b00 + b01 + b02 + b10 + b11 + b12 + b20 + b21 + b22)filtG =(g00 + g01 + g02 + g10 + g11 + g12 + g20 + g21 + g22)/ 9
filtB =/9
強度変換:
filtI2 =(filtR + filtG + filtB)/ 3
== filtI2 =(r00 + r01 + r02 + r10 + r11 + r12 + r20 + r21 + r22)/ 9 +(g00 + g01 + g02 + g10 + g11 + g12 + g20 + g21 + g22)/ 9 +(b00 + b01 + b02 + b10 + b11 + b12 + b20 + b21 + b22)/ 9)/ 3
==> filtI2 =((r00 + r01 + r02 + r10 + r11 + r12 + r20 + r21 + r22)+(g00 + g01 + g02 + g10 + g11 + g12 + g20 + g21 + g22)+ + B11 + B12 + B20 + B21 + B22))/ 27
第1の強度に変換する:
I00 =(R00 + G00 + B00)/ 3、I01 =(R01 + G01 + B01)/ 3、I02 =(r02 + g02 + b02)/ 3、...、i22 =(r22 + g22 + b22)/ 3
フィルタI:
(r00 + g00 + b00)/ 3 +(r01 + g01 + b01)/ 3 + ... +((b00)+ b01) (r00 + r01 + r12 + r20 + r21 + r22)+(g00 + g01 + g02 + g10 + g11 + r11 + r22) g12 + g20 + g21 + g22)+(b00 + b01 + b02 + b10 + b11 + b12 + b20 + b21 + b22))/ 27
このように、 。
H(色相)のために同じことを試してみてください:rgb2hsi.m
で
参照Hの式:!
H(nz)=atan2(b(nz),a(nz))*(180/pi);
H(H<0)=H(H<0)+360;
H(~nz)=0;
を今= filtH2(順序が重要)いくつかの例を試してみて、その汚物を見ます。
最初の質問に対する回答:RGBとHSIモデルは異なる色空間で、(ほぼ)同じ色の数学的表現です。コンピュータモニタに画像を表示するには、sRGBカラーモデルに変換する必要があります(他のモデルもサポートされています)。ただし、HSIカラースペースでは画像を表示できません。 – Rotem
もし私がHSIにrgbを変換すれば、色も同様に影響を受けるはずですか? –
RGBをHSIに変換し、HSIをRGBに戻して変換します(表示用)。変換されたRGBはソースRGBと等しくなければなりません。 (色は影響を受けるべきではありません**)。 – Rotem