画像処理について
20 ビュー (過去 30 日間)
古いコメントを表示
画像を二値化し、白黒の濃さに応じてRGBの値を変更し、画像の色を変えたいのですが、どのようにすれば良いかわかりません。
二値化はできているのですが、それ以降がなかなかうまくいかないので、教えていただけますと幸いです。
0 件のコメント
回答 (1 件)
Atsushi Ueno
2023 年 6 月 21 日
I = imread("peppers.png");
BW = im2gray(I) > 128; % 二値化データを作成
BW3 = repmat(BW,1,1,3); % 二値化データをRGBの3枚分重ねる
I(BW3) = 255; % 元画像の内、BW=TRUEの画素を白(255,255,255)に変更する
% 因みに、I(BW)=255だと意図しない結果(R成分のみ変化)となる
imshow(I);
配列データのアクセス方法を下記に示します。添え字によるアクセスの他に、logical 配列によるアクセスも可能です。
A = 1:10
B = A([3 5 8]) % 添え字によるアクセス
C = A([false false true false true false false true false false]) % logical 配列によるアクセス
さて、モノクロ画像データは2次元配列、カラー画像データは3次元配列(R,G,B)です。
元画像データを二値化データでアクセスすれば、TRUEの画素のみ選択して色を変える事が出来ます。
但し、カラー画像データをモノクロ画像データに変換する際にRGB3要素あったデータが1要素に減ってしまっているので、二値化したデータを3枚分重ねてやらないと、期待するようなアクセスになりません。
2 件のコメント
Atsushi Ueno
2023 年 6 月 22 日
移動済み: Atsushi Ueno
2023 年 6 月 22 日
MATLABでは2次元データのインデックスをX要素、Y要素に分けて入力出来ないので、線形インデックスを使って指定する方法を提案致します。
I = imread("peppers.png");
G = im2gray(I); % グレースケール化。rgb2gray(I)も可
idx = find(100 <= G & G <= 128); % 二値化データの線形インデックスを作成
N = numel(G); % 画素数
C = ones(numel(idx),1); % 線形インデックスと同サイズのベクトル(値は1)
I([idx; idx+N; idx+N+N]) = [C*187; C*66; C*246]; % RGBの順に係数を調整する
imshow(I);
参考
カテゴリ
Help Center および File Exchange で イメージ タイプの変換 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!