TextRecognizeの結果である画像の設定サイズ

私は自分でショットタイムのためにMathematicaとWolfram言語を学んでいます。多くの設定がどういうわけか隠されていることは私にとってそれの痛みです。今、私はすでに成功したことの解決策を見つけるために何時間も費やしましたが、今では思い出せません。 TextRecognizeを使用してスキャンしたテキストをCharacterのレベルまで分解すると(Wordでも同じです)、個々の文字の切り取られたサブイメージのサイズは異なります(自動)。私にとってこれは文字のような同じような大きさのドットを見るのはナンセンスです "a"と言いましょう。切り取った文字の画像を元のサイズまたは同じサイズで取得したいのですが。 ここにコードの例:

image = Import["https://i.stack.imgur.com/8Vb9o.png"];

enter image description here

dsChars = TextRecognize[image, "Character", {"Image", "Text"}]//Dataset

これはこの結果をもたらします:

resulting_dataset

最初の列の文字のサイズが同じであることを確認します。たとえば、5行目の "e"は6行目の "m"と同じ高さになります 私はどんなアドバイスと助けのためにあなたの時間と努力に感謝します。

編集16.5.18 18時18分 比例してサブ画像を見たいと言ったときに私が何を意味するのかを示すために、サブ画像のリストを使ってできることの例を以下に示します。

Image[Normal[dsChars[{1, 2}, 1]], Magnification -> 1]

images_in_proportion here the "M" is in proportion to "a"

しかし、データセット dsCharsの「プリントアウト」の最初の列にあるサブイメージの外観を変更する方法は?

編集2 17.5.18、17:24 CEST タイトルを編集しました - 長すぎるタイトルの不要な最後の部分「/と潜在的に1列のデータセット/」を削除

1
nl ru de
いいえ、あなたが同様のサイズを持ちたいと思うイメージのために。答えを投稿します。
追加された 著者 user_lian,
ImageResize をチェックしましたか?それは私達が取り組むべき完全な最小の例を持つのを助けるのを助けるでしょう。
追加された 著者 user_lian,
@anderstood - 入力画像が見えるように私の質問を編集していただきありがとうございます。私は、フォーラムのインターフェースについてはまったく経験していません。ありがとうございました。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
anderstood - 例 "scan_text"のためのImageResize?その画像は463 x 286ピクセルのみです。なぜその画像が表示されなかったのか私は知りません。エディタが質問ソースに作成したリンクは、次のとおりです。 .png
追加された 著者 Teofilo Israel Vizcaino Rodrig,

4 答え

You can simply set ImageSizeMultipliers -> 1 for the Dataset:

Style[Dataset[dsChars2], ImageSizeMultipliers -> 1]

screenshot

3
追加された
@CJoe スタイル[データセット[dsChars2]、GraphicsBoxOptions - > {BaseStyle - > Magnification - > 1}] を試してください。
追加された 著者 MGOwen,
@CJoeそれは私にとってはうまくいかないでしょう(OSXではv11.2か11.3)
追加された 著者 Mars,
繰り返しになりますが、残念なことに、十分な評判ポイントは得られていないとシステムから判断されるので、回答を有用なものとしてマークすることはできません。誰かが私のためにAleksey PopkovとSquareOneの回答でそれを行うことができますか?
追加された 著者 Teofilo Israel Vizcaino Rodrig,
それはいい!それは数ヶ月前に私がすでにどこかで見つけたものでした、しかしそれを再び見つけることができませんでした。完璧です!
追加された 著者 Teofilo Israel Vizcaino Rodrig,
Aleksey、今試してみましたが、Raspberry PI 3 Mathematica(v。11.2.0.0)では動作しません - Styleの結果は、以前のデータセットの外観と同じです:(
追加された 著者 Teofilo Israel Vizcaino Rodrig,
@AlexeyPopkov - 残念ながらこれも助けにはなりませんでした。ところでdsChars2に適用する必要はありますか?私はここdsCharsであるTextRecognizeの直接の結果を使って作業するのを好みます
追加された 著者 Teofilo Israel Vizcaino Rodrig,

それまでの間、私は自分の質問に対する非常に受け入れ可能な答え(解決策1)を見つけ、SquareOneはそれを2つの追加の完璧な答え(解決策2と3)に調整しました。

この場合:

image = Import["https://i.stack.imgur.com/8Vb9o.png"];
dsChars = TextRecognize[image, "Character", {"Image", "Text"}]

私の解決策は(解決策1)です。

Transpose[{Image[dsChars[[All, 1]], Magnification -> 1], dsChars[[All, 2]]}]//Dataset

しかし、@ SquareOneはこのソリューションを(ソリューション2)に非常に単純化しました。

dsChars /. x_Image :> Image[x, Magnification -> 1]// Dataset

それは転置を必要としないので、これは私にははるかに優れた解決策と思われる。

Also @SquareOne draw my attention to the fact that if the "image" which I let TextRecognized was already provided with property of Magnification->1, then the resulting sub-images of individual characters will come out from the Textrecognize properly.

したがって、これも同様に完璧な解決策です(解決策3)。

image = Image[Import["https://i.stack.imgur.com/8Vb9o.png"], Magnification -> 1];
dsChars = TextRecognize[image, "Character", {"Image", "Text"}]// Dataset

All those solutions are giving following, for me perfectly reasonable output: enter image description here

@SquareOneが解決策2と解決策3を別々の回答として作成した場合、それらを両方とも私の質問に対する完璧な回答としてマークしておくとよいでしょう。

3
追加された

私がよく理解しているなら、多分これ:

与えられた

image = Import["https://i.stack.imgur.com/8Vb9o.png"]
dsChars = TextRecognize[image, "Character", {"Image", "Text"}]

それから

 MapAt[ImagePad[#, 
    [email protected]
     Through[{Floor, Ceiling}[({30, 30} - ImageDimensions[#])/2]]] &, 
  dsChars, {All, 1}]//Dataset

Blockquote

2
追加された
@ CJoe実際にはdoをインポートした直後にもっと単純な解決策があります。 image = Image [image、Magnification - > 1]
追加された 著者 Mars,
@ CJoeあなたは実際に解決策を見つけました! Image では、オプション Magnification はデフォルトで Automatic に設定されています。あなたは自分の投稿に自己返答するべきです(そうしても大丈夫です)。もっと簡単な方法: dsChars /。 x_Image:>画像[x、倍率 - > 1]
追加された 著者 Mars,
@CJoe +1今すぐ投票できます
追加された 著者 Mars,
@ CJoeはい、2番目の単純化で、継承はうまくいくと思いました。ここでの私の投稿は画像を変更するのであなたの質問には答えていませんが念のために残します。
追加された 著者 Mars,
ポイントをありがとう:)。そして、あなたの(最初の)単純化は素晴らしいです!転置なし、完璧です。そしてそれは私が学ばなければならないコードの書き方です。ありがとう。 2番目の単純化は私にとって非常に興味深いように思えます - それはサブイメージがオリジナルのImageからMagnificationプロパティを継承したので、TextRecognizeは何の影響も与えなかったということですか?それからそれは私と一緒にフィットし始めます。どうもありがとう。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
とにかくありがとうSquareOne
追加された 著者 Teofilo Israel Vizcaino Rodrig,
残念ながら、私はあなたの答えを私が十分な評判ポイントを持っていないことを私に告げてくれるので有用としてマークすることはできません
追加された 著者 Teofilo Israel Vizcaino Rodrig,
その間に、私は次の解決策を見つけました:しかし、あなたと私の両方の解決策は私には複雑すぎるようです。結果をどのように表示するかをTextRecognizeに直接伝えるか、またはどのプロパティに最初の行にイメージを含めるかを伝えるための何かが必要です。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
はい、私が探していたサブ画像のそのような外観
追加された 著者 Teofilo Israel Vizcaino Rodrig,
image = Import["https://i.stack.imgur.com/8Vb9o.png"]
dsChars = TextRecognize[image, "Character", {"Image", "Text"}]
dsChars2 = Transpose[{ImageResize[#, {20}] & /@ dsChars[[All, 1]], 
dsChars[[All, 2]]}]//Dataset

enter image description here

これにより、各サムネイルの最大幅または高さは最大20ピクセルになります。それぞれに20ピクセルの高さを設定することもできます。

0
追加された
なるほど、なるほど。 TextRecognize が実際に画像の寸法を変更していることを確認できます。これは Dataset とは関係ありません。 dsChars = TextRecognize [image、 "Character"、{" Image "、" Text "}] 、次に ImageDimensions/@ dsChars [[All、1]]
追加された 著者 user_lian,
バウンディングボックスは dsChars = TextRecognize [image、 "Character"、{"Image"、 "Text"、 "BoundingBox"}] で取得できます。ボックスの高さが異なることを確認できます。 [image、Graphics @ dsChars [[All、3]]] を表示します。そのため、長方形の高さがすべて同じになるように長方形を変更してから、対応する画像を抽出しますか。
追加された 著者 user_lian,
@ C私は今それを手に入れました、そして私はあなたがいくつかの素晴らしい答えを得たのを見ます!パーフェクト!
追加された 著者 user_lian,
私の質問では、「...それから個々の文字のトリミングされたサブイメージのサイズが異なる(自動)...」と不正確に定式化したことがわかりました。その代わりに、切り取られたサブイメージは結果として得られるデータセット内で寸法が変更されて表示され、互いに比例しないようになっているので、たとえば大文字は小文字と同じ高さになります。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
たとえば、大文字の "M"は小さい "a"よりも多くのスペースを必要とするため、ボックスのサイズが異なることを確認してください。私はこれらの実際の寸法を失いたくはありません、そして私はそれらがオリジナルの画像から切り取られたような割合でサブ画像を見たいです。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
プロパティ設定やデータセットテーブル内の画像の外観を変更するための設定があることを確認してください。これまでは、同じサイズの文字を使用することにしました。しかし、私はこの設定を二度と見つけることができません。私はそれらのリストの文字画像の外観を変更することにも成功しました - > Image [TextRecognize [image、 "Word"、{"Image"}]、倍率 - > 1] 上記のデータセットのようなリストのリストでこれを行うために。
追加された 著者 Teofilo Israel Vizcaino Rodrig,
ありがとうございましたが、私はプロポーショナルのような意味や言い方で類似している必要があります - 大文字の "M"は "a"より高くなければなりません。そして私はImageResizeがそれらの画像の実際のサイズを変えると思います。私はサブイメージをすべて同じ「解像度」で見る必要があるだけです。そして私が理解しているように、それらは本当に元々の解像度の中にあります。それらだけが、奇妙な "自動"サイズでデータセットテーブルに表示されます。
追加された 著者 Teofilo Israel Vizcaino Rodrig,