MATLAB Answers

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を返します。
以上、ご参考まで

  0 Comments

Sign in to comment.

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!