2017-04-25 4 views
0

私はすべての単一ピクセルを変更したいので、 "255ピクセル"です。 私はfor-loop(!)でやりたいです。単一画像ピクセル、matlabにアクセス

今までの私のコード:

for n=1:1:512 %it's a 512x512 image 
    picture = 255 - picture; 
end 

しかし、私は、画像内の単一のピクセルによって、単一のピクセルを変更する方法がわかりません。

私のコードで "画像"を変更する必要があるのは何ですか?

申し訳ありませんが、英語が貧しいです。私も初心者です。

ありがとうございました

答えて

4

ある典型的なRGBフォーマットであります一般的な配列の各要素:

for n=1:size(picture,1) 
    for m=1:size(picture,2) 
    picture(n,m) = 255 - picture(n,m); 
    end 
end 

for n=1:numel(picture) 
    picture(n) = 255 - picture(n); 
end 

または、2次元配列のためのネストされたループが必要な場合

しかし、これは実際にMatlabの悪用です。なぜこのようなfor-loopsを避けるために、正確にはです。なぜMatlabを使いたいのかの大きな部分です。代わりに、単に:num30とは何ですか?

picture = 255 - picture 
+0

それは大学での演習であり、ループを使うことだけを言いましたが、2回目の演習では、提案した方法(行列演算)のようにすると言いました – noclue123

+0

私はこれが運動の一部であると想像しました。 ['numel'](https://www.mathworks.com/help/matlab/ref/numel.html)は、配列内の要素の数を数えます。最初の例では、これを[linear indexing](https://www.mathworks.com/help/matlab/math/matrix-indexing.html#f1-85511)と共に使用して、形状に関係なく配列のすべての要素にアクセスします。 Matlabのドキュメント、特に[基本]に関するセクション(https://www.mathworks.com/help/matlab/language-fundamentals.html)を参照すると便利です。 – Yuval

2

画像全体を変更したい場合は、forループを使用しないことをおすすめします。 ジャスト:

picture = 255 - picture; 

それがループで動作するように持っていない場合、MATLABが高速です。

あなたがループし、絵のためにそれを修正する必要がある場合は、あなたがのため数に補数を計算するために、forループ使用を主張する場合は、画像サイズが512x512x3

for a=1:512 
    for b=1:512 
     for c=1:3 
      picture(a,b,c) = 255 - picture(a,b,c); 
     end 
    end 
end 
関連する問題