MATLAB Coderで生成した​​C++関数を使用す​ると、一部機能(im​cropなど)におい​て正しい値が出力され​ないです。

2 views (last 30 days)
yuto mori
yuto mori on 28 Mar 2020
Answered: Etsuo Maeda on 31 Mar 2020
入力画像と切り取り画像をグレースケール化し、合計の輝度値を算出する関数であるMファイル(debug_left_20200328.m)
function result = debug_left_20200328(I)
% 画像のグレースケール化
I_gray = rgb2gray(I);
% グレースケール画像の合計輝度値算出
sum_I_gray = sum(I_gray, 'all');
% 画像の切り取り
face_detect = imcrop(I,[0 225 300 150]);
% 画像のグレースケール化
face_gray = rgb2gray(face_detect);
% グレースケール画像の合計輝度値算出
sum_face_gray = sum(face_gray, 'all');
% 2画像における合計輝度値算出
result = sum_I_gray + sum_face_gray;
をMATLAB CoderでC++ソースコードファイルに変換しました。(入力Iの型:uint8 600 x 450 x 3 )
その後、packNGoコマンドにより、ビルドに必要な全てのファイルをパッケージ化し(パッケージ化したものをzipファイルで添付させていただきます)
Visual Studio 2019 により統合開発環境を整えました。(各リンカーの設定に問題はありません)
そこで実行をしたところ、sum_I_grayは予想通りの値が出力されましたが、sum_face_grayに関しては予想とは違う値が出力されてしまいました。
そこで以下のような推測を立てました。
「rgb2gray, sum関数はC++変換後も正しく機能しているが、imcrop関数は正しく機能していない」
そこで最終的な質問ですが、imcrop関数をはじめとする一部関数においてはC++変換後にバグが発生してしまうのでしょうか?
===========開発環境======================
OS: Windows 10 pro
開発環境: Visual Studio 2019
使用言語: C++
========================================
  1 Comment
Hiroyuki Hishida
Hiroyuki Hishida on 28 Mar 2020
こんにちは *後日、別な方が見られるかもしれないと思って書いてます
予想された値は誰にもわかりませんので、再現できる画像とその予想された値を提供いただけませんか?
よろしくお願いします。

Sign in to comment.

Answers (1)

Etsuo Maeda
Etsuo Maeda on 31 Mar 2020
回答がついていないようなので。
自分のワークフローに機能を取り込んでしまうと、自分のバグなのか、ツールのバグなのか切り分けができなくなります。
簡単なコードでツールの挙動を確認してから、自分のワークフローに組み込んでみましょう。
function out = aaa(in)
out = imcrop(in, [75 68 130 112]);
end
についてMEX化して、以下のように確認してみてください。
filename = 'cameraman.tif';
in = imread(filename);
out0 = imcrop(in, [75 68 130 112]);
out1 = aaa(in);
out2 = aaa_mex(in);
isequal(out0, out1, out2)
少なくとも私の環境R2019a, MSVC++2017, Win10の環境ではisequalは1を返します。
以上、ご参考まで

Categories

Find more on MATLAB Coder in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!