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

조회 수: 2 (최근 30일)
yuto mori
yuto mori 2020년 3월 28일
답변: Etsuo Maeda 2020년 3월 31일
入力画像と切り取り画像をグレースケール化し、合計の輝度値を算出する関数である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
Hiroyuki Hishida
Hiroyuki Hishida 2020년 3월 28일
こんにちは *後日、別な方が見られるかもしれないと思って書いてます
予想された値は誰にもわかりませんので、再現できる画像とその予想された値を提供いただけませんか?
よろしくお願いします。

댓글을 달려면 로그인하십시오.

답변 (1개)

Etsuo Maeda
Etsuo Maeda 2020년 3월 31일
回答がついていないようなので。
自分のワークフローに機能を取り込んでしまうと、自分のバグなのか、ツールのバグなのか切り分けができなくなります。
簡単なコードでツールの挙動を確認してから、自分のワークフローに組み込んでみましょう。
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を返します。
以上、ご参考まで

카테고리

Help CenterFile Exchange에서 MATLAB Coder에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!