フィルタ処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hnkto
記事: 10
登録日時: 6年前

フィルタ処理について

#1

投稿記事 by hnkto » 5年前

白黒濃淡画像を入力とし,鮮鋭化処理を実現するプログラムを作成し,k の値を変えて実行し,考察せよ.

という、C++の課題なのですが、C++を全く授業でやったことがないのに画像処理の講義を取ったため、このプログラムが何をしているか全くわかりません。どなたか解説をお願いしたいです、よろしくお願いします。

コード:

#include "common.h"


cv::Mat unsharp(const cv::Mat_<uchar> image, double k)
{ 
	cv::Mat_<uchar> dst= cv::Mat::zeros(image.rows, image.cols, CV_8U);

	for (int i = 1; i < image.cols - 1; ++i)
	{
		for (int j = 1; j < image.rows - 1; ++j)
		{
			double tmp = (1 + 8 * k)*image(j, i) -
				k * (image(j - 1, i - 1) + image(j - 1, i) + image(j - 1, i + 1) +
					image(j, i - 1) + image(j, i + 1) +
					image(j + 1, i - 1) + image(j + 1, i) + image(j + 1, i + 1));
				//■ここで教科書115ページの図5.32の処理をする
			if (tmp < 0) tmp = 0;
			if (tmp > 255) tmp = 255;
			dst(j, i) = (uchar)tmp;
		}
	}

	return dst;
}

int main(int argc, char* argv[])
{
	cv::Mat_<uchar> image, out;
	if (argc > 1)
	{
		image = cv::imread(argv[1]); 
	}
	else {
		//image = cv::imread("C:¥¥opencv¥¥sources¥¥samples¥¥data¥¥baboon.jpg",0);
		image = cv::imread("flower.jpg", 0);
	}
	cv::imshow("input", image);
	cv::waitKey();

	double k = 3;			//画像やkを変えて効果を確認しよう

	out=unsharp(image, k);

	cv::imshow("unshark masking", out);
	cv::waitKey();
	return 0;
}


アバター
usao
記事: 1887
登録日時: 11年前

Re: フィルタ処理について

#2

投稿記事 by usao » 5年前

他のトピックと同様に,
>実現するプログラムを作成し
がクリアできてるように見えるのに,その内容がわからんという主張が理解できない.
仮に自分で書いたコードではないのだとしても,
プログラムを動作させる環境くらいはないのでしょうか.
> 実行し,考察せよ.
と言ってるくらいですから,動作環境は用意されているように想像しますが.
プログラム(特に画像処理のような,絵的な結果を見れるもの)が何やってるかを知る手っ取り早い方法の一つに「とりあえず動作させてみる」があると思うので
とりあえず動作結果を見てみたらどうでしょう?

まぁ,
> 鮮鋭化処理を実現するプログラム
って言ってる時点で,「先鋭化処理」を行っている可能性が圧倒的に高い気がしますが.

それはそれとして,

> //■ここで教科書115ページの図5.32の処理をする

と書かれているのだから,それが,

> このプログラムが何をしているか

のヒントになるんじゃないですか? (それ以外のことはほぼやってないわけだし.)

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: フィルタ処理について

#3

投稿記事 by Dixq (管理人) » 5年前

ここのサイトはプログラミング言語を学ぶ人をサポートするための場所です。
もしhnktoさんが、まったくC++を学ぶ気が無く、自分で解けないけど単位はほしいから答えだけ教えてほしいということであれば私は手助けできません。
もしhnktoさんがC++を学ぶ意思があるのであれば一緒に頑張りましょう。
まず、C++を全くやったことない人が突然OpenCVやるのはハードルが高いです。
まずは王道のhello worldから始めるべきでしょう。
手元にコンパイル環境はあるのでしょうか?
もしないのであればコンパイル環境を用意しましょう。
課題で実行してみようと書かれている部分が多いのであれば実行してみましょう。

VisualStudio2017Community
https://imagine.microsoft.com/ja-jp/Catalog/Product/530

これをインストールします。
まずはこれを使って基本的な勉強をしましょう。
それができたらOpenCVの環境を整えます。

https://www.google.com/search?q=opencv+ ... C%E3%83%AB

提示されているコードは難解なものというほどではないですが、C++を全くやったことが無い人がすぐ理解できるレベルではありません。
少しずつ学びながら質問してもらえるのであれば手伝います。

返信

“C言語何でも質問掲示板” へ戻る