質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

1回答

527閲覧

MATLABの画像処理に関するコード

退会済みユーザー

退会済みユーザー

総合スコア0

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2017/12/05 06:49

編集2017/12/06 03:07

###前提・実現したいこと
Matlabで形態変換を行い、画像の黒い部分を濃くする画像処理のコードをカラー画像に適用させようとしています。モノクロ画像に適用させたものが以下のコードで、これをどのように変更したらカラー画像でも同様のことができるのか考えています。
元のコードは、モルフォロジー演算というものを使用しているらしく、以下のサイトを参考にしています。

モルフォロジーに関するMATLABの参考サイト

###該当のソースコード

matlab

1picture = imread('sample.jpeg'); 2change = rgb2gray(picture); 3imshow(change); 4e = morph(change, 'dilate'); 5e = morph(e, 'dilate'); 6e = morph(e, 'dilate'); 7imshow(e); 8 9function Boldblack = morph(change, op) 10 [r, c] = size(change); 11 Boldblack = uint8(zeros(r,c)); 12 for i=1:r 13 for j=1:c 14 mc = change(i,j); 15 for k = -1:1 16 for s = -1:1 17 cr = i+k; 18 cc = j+s; 19 if (i+k<1) 20 cr = abs(i+k)+1; 21 elseif (i+k>r) 22 cr = 2*r-i-k; 23 end 24 if (j+s<1) 25 cc = abs(j+s)+1; 26 elseif (j+s>c) 27 cc = 2*c - j-s; 28 end 29 if change(cr,cc) < mc && strcmp(op, 'dilate') 30 mc = change(cr,cc); 31 elseif change(cr,cc) > mc && strcmp(op, 'erode') 32 mc = change(cr,cc); 33 end 34 end 35 end 36 Boldblack(i,j) = mc; 37 end 38 end 39end

###発生している問題・エラーメッセージ
###試したこと1

matlab

1picture = imread('sample.jpeg'); 2change = rgb2gray(picture);

上記のように「rgb2gray」を「rgb2」に書き換えて実行しましたが、
以下のようにエラーが出てしまいました。

関数または変数 'rgb2' が未定義です。 エラー: sample12_5 (line 2) change = rgb2(picture);

###試したこと2
以下のようにrgb2gray関数部分を適用しないコードを書くと、
eが3つあるので下記のコードではモノクロで更に3枚表示されてしまう状況です。
rgb2gray関数を適用しなくてもカラー写真がモノクロになってしまっています。

matlab

1picture = imread('sample.jpeg'); 2%change = rgb2gray(picture); 3imshow(picture); 4e = morph(picture, 'dilate'); 5e = morph(e, 'dilate'); 6e = morph(e, 'dilate'); 7imshow(e); 8 9function Boldblack = morph(picture, op) 10 [r, c] = size(picture); 11 Boldblack = uint8(zeros(r,c)); 12 for i=1:r 13 for j=1:c 14 mc = picture(i,j); 15 for k = -1:1 16 for s = -1:1 17 cr = i+k; 18 cc = j+s; 19 if (i+k<1) 20 cr = abs(i+k)+1; 21 elseif (i+k>r) 22 cr = 2*r-i-k; 23 end 24 if (j+s<1) 25 cc = abs(j+s)+1; 26 elseif (j+s>c) 27 cc = 2*c - j-s; 28 end 29 if picture(cr,cc) < mc && strcmp(op, 'dilate') 30 mc = picture(cr,cc); 31 elseif picture(cr,cc) > mc && strcmp(op, 'erode') 32 mc = picture(cr,cc); 33 end 34 end 35 end 36 Boldblack(i,j) = mc; 37 end 38 end 39end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

試したこと1
rbg2が定義されていないので、エラーが出て当然です。

試したこと2
pictureがRGB画像であれば3次元の配列になります。
関数morphは、2次元配列picuture(:,:,1)のみを使用しているため、処理後に得られる配列は2次元配列=グレースケール画像となります。

投稿2017/12/06 01:46

編集2017/12/06 03:16
WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/06 03:00

コメントいただきましてありがとうございます。 rgb2grayという関数が何をしているのか理解することができました。 ただ今回の場合、試した事のようにコードを変更しても、カラー画像のまま、黒色を濃くすることができていない状況です。
退会済みユーザー

退会済みユーザー

2017/12/06 03:07

試したこと2に追記しました。お手数おかけしますが、ご確認いただけますと幸いです。
退会済みユーザー

退会済みユーザー

2017/12/20 06:35

ご回答いただきましてありがとうございました。お礼が遅くなって申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問