本記事でできること
画像は、左上から横に、コントラストゲイン
0.2, 0.4, 0.6,
0.8, 1.0, 1.2,
1.4, 1.6, 1.8
に変更したもの。(1.0は元画像と同じ)
想定シーン
ロボットをビジュアルフィードバック制御する
カメラを使ったロボットアームの制御方法を、ビジュアルフィードバック制御といいます。ここでは、ビジュアルフィードバック制御を使った自動化システムを開発する際に必要となる画像認識プログラムをまとめています。
画像のコントラストを調整する
産業用ロボットでビジュアルフィードバック制御を実装する際、カメラの撮像環境によっては、コントラストが低かったり高かったりして、画像認識がしにくい、というケースがあります。本記事では撮影した画像に対してコントラストを調整するプログラムを掲載します。
実行環境
- OS:Ubuntu 22.04 LTS
- 言語:C++
- クルーボ:v5.1.0
クルーボについて
ロボットアプリケーション開発には、株式会社チトセロボティクスのロボット制御ソフトウェア「クルーボ」を使用します。本記事のプログラムは、クルーボがインストールされた制御コンピュータ上で動作します。
- クルーボの製品サイト:https://chitose-robotics.com/product
プログラム抜粋
/* コントラストゲインの推奨範囲:0.2~1.8 */
cv::Mat adjust_contrast(const cv::Mat& image, const float contrast_gain) {
cv::Mat contrast_adjusted_image = contrast_gain * image;
return contrast_adjusted_image;
}
全体プログラム
#include <iostream>
#include <opencv2/opencv.hpp>
cv::Mat load_image(const std::string file_path) {
cv::Mat loaded_image = cv::imread(file_path, 1);
if (loaded_image.empty()) {
throw std::runtime_error("画像を正常に読み込めませんでした。");
}
return loaded_image;
}
/* コントラストゲインの推奨範囲:0.2~1.8 */
cv::Mat adjust_contrast(const cv::Mat& image, const float contrast_gain) {
cv::Mat contrast_adjusted_image = contrast_gain * image;
return contrast_adjusted_image;
}
int main(void) {
std::string file_path = "../data/fuji.jpg";
const cv::Mat loaded_image = load_image(file_path);
/* コントラストゲインの推奨範囲:0.2~1.8 */
const float contrast_gain = 1.8f;
const cv::Mat adjusted_image = adjust_contrast(loaded_image, contrast_gain);
cv::imshow("window", adjusted_image);
cv::waitKey(0);
}
おわりに
人手作業をロボットアームで自動化するために、カメラを使ったロボット制御=ビジュアルフィードバック制御が大切です。
ロボット制御用の画像認識でも中身のひとつひとつはシンプルなので、要素に分解して解説していきたいと思います。