私の手には次のイメージがあります。次のように私は、今、私はピクセルをどのようにトラバースできますか?
どのようにすることができ、ピクセルマスクを取得している
の画像の一部の画素をマークしている
私はその中にあるピクセルだけを通る尋ねる?
私の手には次のイメージがあります。次のように私は、今、私はピクセルをどのようにトラバースできますか?
どのようにすることができ、ピクセルマスクを取得している
の画像の一部の画素をマークしている
私はその中にあるピクセルだけを通る尋ねる?
元の質問:私は私が興味を持って画素のみを保存することができますどのように
?
...
質問:ステップ#2では、これらのピクセルをデータ構造(または何でも)に保存して、別の関数f2(I、d、p、q 、r)これらのピクセルに基づいてその画像上で何かを行うd。
は、注目画素を追跡するために、画像の論理的なマスクを使用してみてくださいバイナリマスクを作成します。私はここに、たとえば、ランダムな画像を作るよ
:それは、画像を保存して使用する方法を決定するのはあなた次第となります
:ここ
randImg = rand(64,64,3);
imgMask = false(size(randImg(:,:,1)));
imgMask(:,[1:4:end]) = true; % take every four columns This would be your d.
% Show what we are talking about
maskImg = zeros(size(randImg));
imgMaskForRGB = repmat(imgMask,1,1,3);
maskImg(imgMaskForRGB) = randImg(imgMaskForRGB);
figure('name','Psychadelic');
subplot(2,1,1);
imagesc(randImg);
title('Random image');
subplot(2,1,2);
imagesc(maskImg);
title('Masked pixels of interest');
は次のようにそれが見えるものですマスク(あなたの場合はd
)私はあなたの関数がどのように書かれているか分かりません。うまくいけば、この例はあなたにそれがどのようにしてできるかの理解を与えるでしょう。
しかし、今の問題は、どのように私はKにおけるこれらのピクセルを横断しようと思っている:私は投稿以来
EDITは
あなたは2番目の質問を追加しましたか?
Vectrorization
が白に全ての画素を設定する:
randImg(imgMaskForRGB) = 255;
を私の例では、私はで私のマスクで同時に注目画素の全てにアクセスベクトル化ファッション。
Iは、各画素のRGB値を取得するために、3Dマスクに私の2次元マスクを翻訳。つまり、このコードだった:
maskImg = zeros(size(randImg));
imgMaskForRGB = repmat(imgMask,1,1,3);
そして、関心の画像では、これらのすべての画素にアクセスするために、私はこの呼び出しを使用:
randImg(imgMaskForRGB)
これらは興味のあなたのピクセルです。あなたが本当に一度に1つの画素を通過したい場合、あなたは常にでき
randImg(imgMaskForRGB) = randImg(imgMaskForRGB)/2;
ループ
:あなたは1/2で、これらの値を分割したい場合は、このような何かを行うことができますdouble forループを使用してください:
for r=1:size(randImg,1)
for c=1:size(randImg,2)
if(imgMask(r,c)) % traverse all the pixels
curPixel = randImg(r,c,:); % grab the ones that are flagged
end
end
end
しかし、今問題は、どのようにそれらのピクセルを横断するつもりですか? – anonymous
私は次の画像への割り当てのピクセルをたどった。イメージマスクは、コードをベクトル化することができます。 'randImg(imgMaskForRGB);'各ピクセルを見るには、単純にdouble forループを実行して、一度に1つの注目ピクセルを取り出します。 – informaton
'randImage'のすべてのピクセルをトラバースしています。私はマスクにあるピクセルだけを通過したいと思っていました。 – anonymous
大丈夫です。私はあなたがマスク内のすべての真のピクセルを反復処理したいバイナリマスク、マスク、を考えると、あなたは、少なくとも2つのオプションがあり、@informatonの答えを使用して
I = imread('gray_bear.png');
J = rgb2gray(imread('marked_bear.png'));
mask = I-J;
for r=1:size(I,1)
for c=1:size(I,2)
if(mask(r,c))
I(r,c) = 255;
end
end
end
imshow(I);
これを解決しましたどちらもdouble forループの例よりも優れています。
1)論理インデックス。
I(mask) = 255;
2)使用して見つけます。
linearIdx = find(mask);
I(linearIdx) = 255;
元の質問も良かったと思っていましたので、私はどこから来ているのか疑問に思っていません。後続の質問を別の投稿に自由に投稿してください。私はあなたのためにそれらをupvote :) – informaton