手習ひデジタル信号処理(144) Scilab、{IPCV}、画像の強化と修復、その1

Joseph Halfmoon

前回は画像の算術演算を行い、お猿様のご尊顔が変化する様子を観察しました。今回も「お猿様祭り」はつづきます。前回のような「単純な」算術演算ではなく、画像ならではの「強化と修復」処理向けの関数どもを手習ひしてみます。ただ、関数の数が多いので今回は半分だけだけれども。例によってお猿様のご尊顔が変化(へんげ)。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※Windows11上の   Scilab2024.0.0およびScilab上のScilab IPCVツールボックスを使用させていただいております。

Image Enhancement and Restoration

今回の分類カテゴリは、「画像の強化と修復」であります。画像にメリハリをつけたり、ノイズを除去したり「お化粧」を施すための関数どものようです。合計10個も関数があるので、今回はそのうち以下の5個を手習ひしてみます。残りは次回の予定。

    • imadjust
    • imdecorrstretch
    • imhistequal
    • imnoise
    • immedian

最初の imadjust関数の説明を引用させていただきます。

Adjust the intensity of an image from given source histogram range to the destination histogram range

素人老人は、最初から躓きました。intensity(強度)をどう訳したらよいの?結論から言えば、「色の」3属性、色相、明度、彩度のうち明度(brightnessとも)に対応づけるのがよろしいようです。「光の」方にも光度、輝度、照度などがあるのですが、画像の場合は光じゃなくて「色」だと。

imdecorrstretchは、画像内の色の違いを強調するもの。imhistequalは、局所的に「密集」しているヒストグラムを「散らして」コントラストを高めるためのものみたいです。

一方、imnoise関数は、画像にノイズをのせるもの。今回は「ごま塩ノイズ」(pepper and saltなんだか、salt and pepperなんだか)を「振りかける」のに使ってます。

これに対して immedian関数は、メディアンフィルタをかけるもの。上記の「ごま塩」のようなトートツに現れる白、黒のドットなどを隠蔽してお化粧をするに適するフィルタみたいです。

imadjust、imdecorrstretch、imhistequal

上記の3関数を使ってみるためのコードが以下に。例によって題材はお猿様のご尊顔。

imRGB = imread(fullpath(getIPCVpath() + "/images/baboon.png"));
imGry = rgb2gray(imRGB);
imAdj = imadjust(imGry,[0 0.5],[0.5 1]);
imDcs = imdecorrstretch(imRGB);
imHst = imhistequal(imGry);
subplot(151); title('Original'); imshow(imRGB);
subplot(152); title('imdecorrestretch'); imshow(imDcs);
subplot(153); title('Gray'); imshow(imGry);
subplot(154); title('imadjust'); imshow(imAdj);
subplot(155); title('imhistequal'); imshow(imHst);

画像が以下に。baboonEnhancement

左端がオリジナル。そのに対してその右隣りは imdecorrstretch かけたもの。確かに色の違いが強調されておるようです(ちょっと毒々しい色味。個人の感想です。)中央はお猿様のグレースケール画像。それをimadjustして全体的に明るい色にしてしまったものがその右。一方グレースケール画像にimdecorrstretchをかけてコントラストを強調してみたのが右端です。老眼の目でもバッチリ?だな。

imnoise、immedian

以下は既に生成してあるグレースケール画像に「ごま塩」ノイズを意図的に乗せて汚しておいて、それにメディアンフィルタをかけてお化粧するというわざとらしいコードです。

imN = imnoise(imGry, 'salt & pepper', 0.02);
imM = immedian(imN, 3);
subplot(131); title('Gray'); imshow(imGry);
subplot(132); title('Noise'); imshow(imN);
subplot(133); title('Median'); imshow(imM);

画像が以下に。baboonNose_Median

左端が元のグレースケール画像。真ん中が「ごま塩」を振りかけたものです(英語的にはゴマではなくコショーですが。)白と黒のポッチどもがかかっているのが見えますかな。そしてノイズの乗った画像にメディアンフィルタをかけたものが右端です。確かにごま塩消えてますなあ。

手習ひデジタル信号処理(143) Scilab、{IPCV}、画像の算術演算 へ戻る

手習ひデジタル信号処理(145) Scilab、{IPCV}、画像の強化と修復、その2 へ進む