Filter löschen
Filter löschen

白黒画像のランダムディザリングのアルゴリズム

2 Ansichten (letzte 30 Tage)
Naoki Ishibashi
Naoki Ishibashi am 18 Sep. 2017
Bearbeitet: michio am 19 Sep. 2017
今ランダムディザリングを既存のfunctionに頼らず書こうとしています。以下のコードでif文の論理演算子と行列インデックスでエラーが出てしまったのですが、解決方法がうまく見つけられず困っています。アドバイス頂けると幸いです。またランダムディザリングとしても考え方があっているか、間違っていればアドバイス頂けると幸いです。
以下コード
function result_im = random_dither(gray_im)
in_rows = size(gray_im,1);
in_cols = size(gray_im,2);
result_im = zeros(in_cols,in_rows);
for j= 0:in_rows-1
for i=0:in_cols-1
% r = a + (b-a).*rand(N,1) Nth randum numbers from a to b
threshold = 0 + (255-0).*rand;
if (gray_im(i,j) < threshold)
result_im(i,j) = 0;
else
result_im(i,j) = 1;
end
end
end
figure, imshow(result_im);
end
以下エラー
添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。
エラー: random_dither (line 9)
if (gray_im(i,j) < threshold)

Antworten (2)

michio
michio am 19 Sep. 2017
Bearbeitet: michio am 19 Sep. 2017
エラーの内容はこちらと同じですね。
MATLAB変数への添字は1開始ですので、0を入れるとエラーとなります。例えば
A = rand(1,1);
A(0,0)
添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。

Naoki Ishibashi
Naoki Ishibashi am 19 Sep. 2017
ご回答ありがとうございます。前回は結局別の方法でやってしまいました。添字に0を入れない解決法がわからないのですが、具体的な解決法も教えて頂けると嬉しいです。
  1 Kommentar
michio
michio am 19 Sep. 2017
Bearbeitet: michio am 19 Sep. 2017
ちなみに、質問文内に記載されたコードはIshibashiさんが書かれたものでしょうか?
解決の為にご自身で試した事や検討されたこと、考察なども記載頂けると、Ishibashiさんがどこまで理解されてるのかを少し伺えるので、回答する側も少し助かります。
例えば、
for j= 0:in_rows-1
for j= 1:in_rows
に変更して試してみるなどいかがでしょうか?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu イメージ finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!