subtract関数の処理について
3 次查看(过去 30 天)
显示 更早的评论
subtractという関数を使い、画像同士の減算を行っています。
私が行っている処理は、画像から取り出したい信号だけが見えるように、信号のある画像から信号のない画像を減算することで処理を行っています。
その際に使っているsubtract関数の処理についてお聞きしたいのですが、この関数は減算をしたあとの限界値?はどのようになっているのでしょうか?
例えば、8bitの画像同士を引き算するとき、強度の最大値が256になると思うのですが、差し引かれる画像より差し引く画像の強度値が大きい場合はどのようになりますか?
128-256=-128とならず、0になりますか?
また、-128となるような処理の仕方を知っている方がいましたら教えて頂けると助かります。
減算後のマイナス値を二乗してSN比の高い画像を得られれば良いなと考えております。
とても困っています。よろしくお願いします。
0 个评论
采纳的回答
Shunichi Kusano
2021-1-20
imsubtract関数のことでしょうか?それともsubtractという自前の関数をお使いなのでしょうか。
imsubtract関数であれば負の数はゼロに丸められると記載があります。
負の数を出したいのでしたらsingleかdoubleに変換してから計算するのが一番間違いないかと思います。もし元の画像がuint8に固定の場合でしたら計算結果の取りうる範囲は-255~255となるのでint16型でも大丈夫です。
a = rand(3,3)*100;
b = rand(3,3)*100;
imsubtract(a,b)% マイナスが出るのを確認
class(a) % a(bも同じ)の型を確認
2 个评论
Shunichi Kusano
2021-1-21
書かれている通り、負の値をそのまま画像として保存はできませんので、int16を画像として保存することはできないです。
また、私が言い出したことなのに恐縮ですが、int16のままだと2乗に耐えられないことになります(理屈上2乗で出てくる最大値、最小値とint16で表現可能な最大値最小値を見比べると確認できます)。doubleに変換したうえで規格化まで行い、画像として保存する段階でuint8に戻す、というのが一番楽だと思います。
規格化も、最大値を基準にするとデータによって基準が変わることになるので、本当にそれでいいのかの検討は必要かと思います。
あと、蛇足かもしれませんが、uint8の最大値は255ですね。表現できるパターンは2^8=256こあるのですが、それを0から割当てていくので最大は255で打ち止め、ということになります。
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 イメージ算術 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!