ピクセルアスペクト比を設定しますか?



Set Pixel Aspect Ratio



解決:

アップデート

バージョン12.1では、彼らは正しい処理を実装しましたのImageResolutionオプション画像(ただしImage3DImageResolutionは引き続き無視されます)。


元の答え

ノート :この投稿へのリンクを付けて、テクニカルサポートに改善の提案を送信しました([CASE:4081592])。



Mathematica すでに基本的に異なる方向で異なる解像度をサポートしていますインポートおよびエクスポート時の画像(たとえば、次のドキュメントページに記載されている内容)「JPEG」形式):

オプション[img =インポート['ExampleData / coneflower.jpg'、ImageResolution-> {72、144}]、ImageResolution]オプション[[メール保護] ['coneflower_new.jpg'、img]、ImageResolution] 
{ImageResolution-> {72、144}} {ImageResolution-> {72、144}}

したがって、ハリルタンは正しいです。開発者は、これがフロントエンドによる画像のレンダリング方法にも影響を与えるはずであることを見逃していました。他の画像ビューアはこの設定を尊重します。たとえば、Windowsフォトビューアが画像をレンダリングする方法は次のとおりです。'coneflower_new.jpg':



スクリーンショット

スクリーンショットからわかるように、画像は指定されたとおりに水平方向に2倍に拡大されます水平方向に2分の1のImageResolution(72 dpi)垂直方向よりも(144 dpi)、予想どおり。

でも設定は間違っていると思います画像全体のAspectRatioは、ピクセルのアスペクト比に等しくなります(halirutanの場合と同様)。これは、実際のアスペクト比も考慮する必要があるためです。全体を計算するときのImageDimensionsアスペクト比。だからここに私の修正がありますを尊重するイメージImageResolution設定(元のコードの変更された部分を次のようにラップしました(*編集開始*)および(*編集終了*)タグ):



保護解除[画像]; MakeBoxes [Image`ImageDump`img:Image [_、Image`ImageDump`type_、Image`ImageDump`info ___]、Image`ImageDump`fmt_] /; Image`ValidImageQHold [Image`ImageDump`img] ^:= With [{Image`ImageDump`newarray = Image`InternalImageData [Image`ImageDump`img、Interleaving-> True]、Image`ImageDump`tag = BoxForm`ImageTag [Image` ImageDump`type、Sequence @@ FilterRules [FilterRules [{Image`ImageDump`info}、Except [Options ['Graphics']]]、Except [ImageMarkers]]]、Image`ImageDump`imgdata = ImageData [Image`ImageDump`img 、{'Width'、 'Height'、 'DataRange'、 'C​​olorFunction'}]、Image`ImageDump`imgsize = Image`ImageDump`ruleValue [{Image`ImageDump`info}、ImageSize]、Image`ImageDump`mag = Image `ImageDump`ruleValue [{Image`ImageDump`info}、Magnification]、(* edit start *)Image`ImageDump`pixelAspectRatio = With [{Image`ImageDump`res = Image`ImageDump`ruleValue [{Image`ImageDump`info} 、ImageResolution]}、If [MatchQ [Image`ImageDump`res、{_?(#> 0&)、_?(#> 0&)}]、Divide @@ Image`ImageDump`res、1、1]] (*編集終了*)}、With [{(*編集開始*)Image`ImageDump`width = Image`ImageDump`imgdata [[1]] / If [Image`ImageDump`pixelAspectRatio 1、Image`Im ageDump`pixelAspectRatio、1、1]、(*編集終了*)Image`ImageDump`range = Image`ImageDump`imgdata [[3]]、Image`ImageDump`cfun = Image`ImageDump`imgdata [[4]]}、 With [{Image`ImageDump`options = Sequence @@ Join [{DefaultBaseStyle-> 'ImageGraphics'、ImageSizeRaw-> {Image`ImageDump`width、Image`ImageDump`height}、PlotRange-> {{0、Image`ImageDump` width}、{0、Image`ImageDump`height}}}、Image`ImageDump`ConvertImageSizeToFE [Image`ImageDump`imgsize、Image`ImageDump`mag]、FilterRules [{Image`ImageDump`info}、Image`ImageDump` $ typesetOptions ]]}、GraphicsBox [TagBox [RasterBox [Image`ImageDump`newarray、{{0、Image`ImageDump`height}、{Image`ImageDump`width、0}}、Image`ImageDump`range、ColorFunction-> Image`ImageDump `cfun]、Image`ImageDump`tag、Selectable-> False]、Image`ImageDump`options]]]];保護[画像];

インポート['coneflower_new.jpg']

スクリーンショット

Image [Image3DSlices [ExampleData [{'TestImage3D'、 'C​​Thead'}]、100、3]、ImageResolution-> {72、72 / 2}]

スクリーンショット


アレクセイは、次の文書化されていない(しかし消えない)ことを提案しましたImageSize構文を使用できます。

img = Image3DSlices [ExampleData [{'TestImage3D'、 'C​​Thead'}]、100,3]; Show [img、ImageSize-> 1-> {1,2}]

ここに画像の説明を入力してください

私はこれがあなたが望むことをしていると思いますか?


これは、の実装では見落とされていた可能性があります画像。私がこれを正しく見たとき、これを処理する正しい方法は、ImageResolutionは、方向によって異なる可能性があることを認識します

ここに画像の説明を入力してください

CTのような医療機器では、方向によって解像度が大幅に異なることは珍しくありません。解像度がわからないプレーンな画像の場合、表示されるサイズは常に、ピクセルが正方形であると想定し、アスペクト比としてのImageDimension-ratio。

しかし、私はこのようなものが機能することを期待していました

img = Image3DSlices [ExampleData [{'TestImage3D'、 'C​​Thead'}]、100、3]; Image [img、ImageResolution-> {100、100}]

Mathematicaグラフィックス

残念ながらそうではありませんが、GraphicsBoxはそれをサポートします。しかし、私たちは修正することができますのMakeBoxes画像と私たちは得るだろう

ここに画像の説明を入力してください

以下は、コードをコピーするのが簡単ではないように思われるため、画像として行った変更です。PrintDefinitionsビュー。

ここに画像の説明を入力してください