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

2 次查看(过去 30 天)
Naoki Ishibashi
Naoki Ishibashi 2017-9-18
编辑: michio 2017-9-19
今ランダムディザリングを既存の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)

回答(2 个)

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

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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 イメージ 的更多信息

Community Treasure Hunt

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

Start Hunting!