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

今ランダムディザリングを既存の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일

2 개 추천

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

0 개 추천

ご回答ありがとうございます。前回は結局別の方法でやってしまいました。添字に0を入れない解決法がわからないのですが、具体的な解決法も教えて頂けると嬉しいです。

댓글 수: 1

michio
michio 2017년 9월 19일
편집: michio 2017년 9월 19일
ちなみに、質問文内に記載されたコードはIshibashiさんが書かれたものでしょうか?
解決の為にご自身で試した事や検討されたこと、考察なども記載頂けると、Ishibashiさんがどこまで理解されてるのかを少し伺えるので、回答する側も少し助かります。
例えば、
for j= 0:in_rows-1
for j= 1:in_rows
に変更して試してみるなどいかがでしょうか?

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 イメージ에 대해 자세히 알아보기

질문:

2017년 9월 18일

편집:

2017년 9월 19일

Community Treasure Hunt

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

Start Hunting!