2016-10-23 9 views
0

私には2つの質問があります。出力は中央値と平均値の両方で同じ画像を生成しますか

最初に、RGBモデルからHSIモデルに画像を変換すると、画像の色が異なって見えますか?

そして第二に、私はmatlabにpepper.pngイメージを使用しています。私の目標はRGBイメージを最初にHSIモデルに変換することです。次に、RGBモデルとHSIモデルの両方で、同じイメージに対してメディアンフィルターと平均フィルターの両方を使用する必要があります。このすべてをやった後、出力画像は、RGBモデルの平均フィルタを使用すると出力画像に等しくないことがわかりました.Himモデルでは同じ画像で平均フィルタを使用しています...正しい出力ですか?平均値フィルタは、RGBモデルの画像と同じ画像でもHSIモデルで使用された場合に、異なる画像を生成しますか?最初の質問へ

+0

最初の質問に対する回答:RGBとHSIモデルは異なる色空間で、(ほぼ)同じ色の数学的表現です。コンピュータモニタに画像を表示するには、sRGBカラーモデルに変換する必要があります(他のモデルもサポートされています)。ただし、HSIカラースペースでは画像を表示できません。 – Rotem

+0

もし私がHSIにrgbを変換すれば、色も同様に影響を受けるはずですか? –

+0

RGBをHSIに変換し、HSIをRGBに戻して変換します(表示用)。変換されたRGBはソースRGBと等しくなければなりません。 (色は影響を受けるべきではありません**)。 – Rotem

答えて

3

回答:
RGBHSIモデルは、異なる色空間である - (約)同じ色の異なる数学的表現。
画像をコンピュータモニタに表示するには、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

差分:
enter image description here

diffI:
enter image description here

結論:
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(順序が重要)いくつかの例を試してみて、その汚物を見ます。

+0

ありがとうございます。これは確かに役に立ちました.. :) –

+0

@RuhulMashbuは、答えを有効として受け入れることを検討し、 –

+0

はい。本当に役に立ちました。なぜ違いがあるのか​​教えていただけますか?これらの違いが画像内で正確に発生する場所はどこですか? –

関連する問題