2025年1月19日日曜日

DICOMに関するお勉強 chatGPTに聞いてみた(未確認)

 Pythonで脳MRIのDICOMデータから特定の信号強度の領域の体積を測定する方法はいくつかのステップに分けて行うことができます。以下に一般的なプロセスを説明します。

必要なライブラリ

  • pydicom: DICOMファイルを読み込むためのライブラリ。
  • numpy: 数値計算を効率的に行うためのライブラリ。
  • matplotlib: 画像の可視化に使用。
  • scipy: 画像データの解析と処理に使う関数を提供。

ステップバイステップの手順

  1. DICOMデータの読み込み: pydicomを使用して、DICOMファイルを読み込みます。
  2. 画像データの抽出: DICOMオブジェクトから画像データを取り出し、必要に応じて配列形式に変換します。
  3. 閾値の設定: 特定の信号強度に基づいて画像から特定の領域を抽出します。このためには、閾値を設定してその値以上または以下のピクセルを選択します。
  4. ラベリング: scipy.ndimageモジュールのlabel関数を使用して、連続する領域(blob)を識別します。
  5. 体積の計算: 選択された領域のピクセル数を数え、各ピクセルの体積をかけて全体の体積を計算します。ピクセルの体積は、ピクセルの寸法とスライスの厚さから算出します。

サンプルコード

import pydicom
import numpy as np
from scipy.ndimage import label
import matplotlib.pyplot as plt

# DICOMファイルの読み込み
dicom_file = 'path/to/your/dicom_file.dcm'
ds = pydicom.dcmread(dicom_file)

# 画像データをnumpy配列に変換
image = ds.pixel_array

# 閾値を設定して領域を選択
threshold = 100  # ここで閾値を設定
binary_image = image > threshold

# 領域のラベリング
labeled_image, num_features = label(binary_image)

# 領域の体積計算
voxel_volume = ds.PixelSpacing[0] * ds.PixelSpacing[1] * ds.SliceThickness
volume = np.sum(labeled_image > 0) * voxel_volume

print(f"Total volume: {volume} cubic mm")

# 結果の表示
plt.imshow(labeled_image, cmap='gray')
plt.show()

このコードは、指定された閾値以上の信号を持つ領域を抽出し、その体積を計算して表示します。必要に応じて閾値やその他のパラメータを調整してください。

2022年4月9日土曜日

緊急事案:温湿度センサーを代用せよ

 仕事で使っている機器に不具合。

温湿度センサーの不調が疑われるとのこと。

シマデン TH71から、温湿度指示調整器 SR92が2台つながっている構成。

かなり古い機器であり、

シマデンさんからは、寿命であると断言。代替えを発注、受注生産のため、納期(3)週間とのこと。

しかしこの機械、今止めるわけにはいかんのです。


操作盤


センサー部分 TH71の基板。ぱっと見てオペアンプ、温度センサー、湿度センサーそれ以外はよくわからない。
説明書を見ると、要するに

湿度
0-100% → 0-10mV
温度
0-50度℃ → 0-50mV
が出ればいいようだ。

温湿度センサーは、簡易的ではありますが、以下のものは使用経験があります。



I2Cではありませんがデジタルで読めるものです。
以下のような概略で小さなセンサー電圧変換をでっち上げて接続。




詳細は省きますが
100円ショップのタッパウェアもどきに全部入れ込んで動作させました。



かれこれ一か月になります。途中ハードウェアのバージョンアップを加えつつ、無停止動作しております。

やっと納品、交換作業日が決まったので、もう少しでお役御免ですが、
趣味が役にたった、とも言えます。

本機、ポイントは、4726はI2Cアドレスが変えられないので、二つ出力するのであれば、4725のほうがよいということです。

あとはライブラリを組み合わせて出力を得るだけです。

スケッチ、詳細回路図は省略します。

必要な方が万が一おられましたら、コメントください。





2022年4月4日月曜日

Apple Thunderbolt display ケーブル交換でなおるか?

 メインのデスクトップの画面はThunderbolt display二台なんですが、片方を認識しなくなってしまいました。

多くのサイトで、ケーブル交換で治る、と書いてあります。

8万円ぐらいの製品ですが、同じ大きさの普通のモニタは20000円ぐらいで買えるし、何より軽いんですよね。

治すかどうかしばらく悩みつつ、apple cinema displayをつないでごまかしていましたが

やはり同じ大きさじゃないと並べて使うのは難しい。

いよいよ修理を決心しました。


これ。いつもは納期などあまり気にしないのですが、現在いろいろな注文が届かないのでそこはかとなく気にしていました。
10日程度で到着。梱包はきちんとしていました。
たしかにブラケットが壊れていますがその意味するところは不明です。B級品ってことですかね。

早速分解。交換です。
T10 T6だけあればできます。シールをはがす何かがあってもいいです。

参考にしたところは、

https://ssilab.co.jp/blog/tech-blog/tech-blog-child/exchange-thunderboltdisplay-cable

https://www.ifixit.com/Guide/Apple+Thunderbolt+Display+Thunderbolt+&+MagSafe+Cable+Replacement/112355

あたりです。
こういうサイトはいつまで保存されているのでしょかね。

手順もサイトの通りです。
表面の画面(磁石でくっついている)を起こしてはがします。



サイトの案内のとおり、コネクタを慎重に外していきます。
最後は、接地なのか、ねじでとまっているところを外します。短めのT10
があると便利です。 液晶を外します。




ifixitのほうがたくさんねじを外しますが、本来不要なところかもしれません。
外したのは電源コネクタ、スピーカーです。


ロジックボードの電源コネクタと、温度センサーのコネクタを外して、7か所のT10ねじを外して裏返すと、thunderbolt ケーブルが基板に刺さっているとこらあります。

ここだけT06です。

さらに、ブラケット周りのねじを外して、ケーブルを引き抜きます。


新規購入品の登場です。


たしかにbroken blacketですが、実用上は金属板で押さえるので、あまり問題ないような気がします。


新旧並べてみます。書いてある番号はちょっと違います。


元の位置に配置して、固定の金属板をねじ止め。


Thunderbolt ケーブルを取りまわして、ロジックボードに差し直し、T06ねじ2本でコネクターを再度覆います。


あとは逆の順番で元通り。
電源コネクタを固定、スピーカーを固定。スピーカのコネクタをさして、
基板のコネクタをさし、元の位置でねじ止め。
液晶のコネクタをねじx1、コネクタ3を戻す。

あっさり認識して、一応治った。ようです。
なお、母艦はMac mini 2012。

しばらく使えるかな。









2022年1月5日水曜日

親子時計(設備時計)をうごかす 3 パルス発生装置

 Arduino + RTC + Hブリッジで行けそうかと思っております。

とり合えず書いたスケッチを。


#include <DS3232RTC.h>           

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

const char *weekStr[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

const int DIN_PIN = 8;


void setup() {

  // use pins for pulse

  pinMode(DIN_PIN, INPUT_PULLUP );

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);


  ///// 時刻の設定 /////

  // 時刻設定時のみ以下2行のコメントアウト(//)する

  //  setTime(12, 26, 30, 14, 1, 2022);  // 時,分,秒,日,月,年の順で設定

  //  RTC.set(now());  

  setSyncProvider(RTC.get);  

  lcd.init();                          

  lcd.backlight();

}


void loop() {


 int value;

  value = digitalRead( DIN_PIN );



  //早送りモードの条件 pin8をアースに落とす 5秒で2パルス

  if (value == LOW) {

    digitalWrite(6, HIGH);

    digitalWrite(7, LOW);

    delay (2000);

    digitalWrite(6, LOW);

    digitalWrite(7, LOW);

    delay(1000);

    digitalWrite(6, LOW);

    digitalWrite(7, HIGH);

    delay (2000);

    lcd.init();

    lcd.setCursor(0, 0);

    lcd.print("FORWARD>>>");


  } else

 //以下通常時計動作 

  {

    lcd.setCursor(0, 0);

    lcd.print(year());

    lcd.print("/");

    if (month() < 10) {

      lcd.print("0");

    }

    lcd.print(month());

    lcd.print("/");

    if (day() < 10) {

      lcd.print("0");

    }

    lcd.print(day());

    lcd.print(" ");

    lcd.print(weekStr[weekday() - 1]);

    lcd.setCursor(0, 1);

    if (hour() < 10) {

      lcd.print("0");

    }

    lcd.print(hour());

    lcd.print(":");

    if (minute() < 10) {

      lcd.print("0");

    }

    lcd.print(minute());

    lcd.print(":");

    if (second() < 10) {

      lcd.print("0");

    }

    lcd.print(second());


//秒数が 0,1秒、30,31秒のときだけpin 6,7出力する。(パルス幅2秒)

    if (second() == 30 || second() == 31) {

      digitalWrite(6, HIGH);

    }  else

      digitalWrite(6, LOW);

    if (second() == 0 || second() == 1) {

      digitalWrite(7, HIGH);

    } else

      digitalWrite(7, LOW);

    delay(1000);  // 1秒でループ

  }

}


とりあえずブレッドボードで動作確認。


2022年1月2日日曜日

Elegoo Mars 2 pro ファームウェア アップデート

CHISUBOX V1.8.1(OS X)が極めて不安定で途中で異常終了してしまう。

やむをえず 1.9.にアップデートしたところ、プリンタ側のファームウェアアップデートを余儀なくされた。

いろいろ検索するとちょっと面倒な時もあるようですが、

結局のところ

USBのrootフォルダにファイルをいれて起動する

そのごprintボタンから、二つのファイルを指定する

ということのようです。






いかのような記載があり。再起動。

ファイルの残りをプリントボタンから明示。

てことのようです。

Restart the machine, the update file .SH4 will be updated automatically, after the successful update there will be a beeping sound and restart the machine

④Print the remaining files to be updated on the printer in the following order: .CBD > .txt

Caution: The.SH4 file will be automatically updated after restarting the machine in the shutdown state. 

親子時計(設備時計)を動かす1

ひょんなことから、設備時計の子時計を入手。

arduinoで動かせるかやってみることにしました。

まずは先人たちの記録を探します。


24V/30secのパルスを極性を変えつつ発生させればいいようです。

コンセントから電源は取らざるを得ないでしょうね。


参考にした場所

https://sound-au.com/clocks/arduino.html


 http://atmk.sakura.ne.jp/site2/radio/masterclock.htm


https://www.instructables.com/Arduino-based-master-clock-for-schools/


https://www.instructables.com/Arduino-LCD-Master-Clock/


https://www.marutsu.co.jp/contents/shop/marutsu/mame/64.html


親子時計(設備時計)を動かす2

 

入手した設備時計 の子時計。

SA-22
2000オーム
I.C.-CIRIZEN
とあります。


両面にあって、ラッチでアルミの箱に固定されており、導線が各2本。


文字盤はこんな感じ。


2021年12月27日月曜日

はがきデザインキットの悲劇

 はがきデザインキット 2022はインストール版がない。

データ移行もweb版では、なにやら一筋縄では行かない様子。

旧パソコンにインストールしてあるのは2021mac版なのだけど、adobe airがアンインストールされており、起動できない。

結局ですね、Adobe Airは、

https://airsdk.harman.com/runtime

からよくわからんなりにダウンロードインストールすれば使えるってことです。

当方はとりあえず復活できました。


参考にしたところは以下になります。
先人のみなさまに感謝しつつ、とりあえず起動した2021で今年は乗り切ります。

https://kadenpc.fun/fudegurume/

https://kadenpc.fun/hagaki_design/


https://blog.hiyowa.com/?p=783

2021年12月1日水曜日

VESAマウントのないモニタをモニターアームに取り付ける


 アマゾン経由で買ったHPのモニタ。27インチ。軽くて老眼にもちょうど良いのだがVESA 非対応。専用スタンドでチルトのみ。

こういうやつ。

HP モニター 27インチ ディスプレイ フルHD 非光沢IPSパネル 超薄型 省スペース スリムベゼル HP M27f 背面ブラック 3年保証付き(型番:2H0N1AA-AAAA)


なんと3年保証がついているので、原状復帰できるようにごにょごにょ


幸い、スタンドは取り外せるのです。
で、これをですね


できる限りばらばらにして中のダイキャストだけを取り出します。


あとは言わずもがなですが
100mm四方にM4の穴と、縦にM3ねじ 80mm間隔で開けたアクリルを切り出して


ねじ止め。モニタースタンドにピッタリ。


わかりにくいですが、本体部分をパチンとはめて位置合わせ。
出来上がり。4画面の上二つです。




2021年10月19日火曜日

windowsで古いファイルをけしたい(TrustedInstaller奪還)

 コントロールパネルから[ユーザー アカウント制御の設定]画面のスライダーを操作して[通知しない]に変更。


ファイル(またはフォルダー)のプロパティ]画面を表示して[セキュリティ]タブ内の[詳細設定]


[ファイル(またはフォルダー)の詳細設定]画面の[所有者]部分の[変更]


[ユーザー または グループ の選択]画面で、

オブジェクトの種類 [groups] 

選択するオブジェクト administorators [確認][OK]。

[サブコンテナーとオブジェクトの所有者を置き換える]チェック。


[ユーザー アカウント制御の設定]画面を表示して[コンピューターに対する変更の通知を受け取るタイミングの選択]で通知設定を元に戻す。


adminから削除可能、なはず。



2021年9月7日火曜日

OLD iMAC 2009 修理

 


古ーいiMacがあるのでした。画面はでかいがただの箱。
電源を入れてもエラー。調べると、メモリが抜かれている。
オークション→メモリ装着。

サムスン メモリ PC3-10600S 2GB×4枚セット (合計8GB)


1333円でした。

画面つかない。やっぱりグラフィックボードかなと。

Thndervoltで外部出力すると、画面はでて、システムないよ〜と。
ディスクもないのかな?

開けてみることにしました。

磁石でくっついてるガラスは手で外せました。
液晶を止めるネジは 2箇所だけのこっていました。
だれかが内部に手を入れたようです。。すなわち廃棄処分用にディスクを抜いたのでしょう。
液晶のケーブルを戻さないままなだけかもしれません。

わくわく。

液晶をはずします。
ケーブルが外れたままです。ビンゴ。させばいいのかな

よーくみると、マザーボードのコネクタが毟られています。液晶を無理やり開いたのでしょう。

こんなありさまです。 さいわいランドやピンは残っています。




ケーブル側についていたコネクタを外してきて、そーっとピンを元の穴にいれます。
なんとかなったかな?

ハウジングを半田づけして、基盤に固定。
まげたりしたピンはもろそうなので、レジンボンドで固めました。









適当に配線をもどして、組み直して、電源を入れると
WWWW
うつった!
とりあえずちょっと黄ばんでますが ファンがものすごい音ですが、HDD固定していませんが、動いたので勝利です。



HDDをSSDにいれかえて、ファンを静かにできれば 何かにつかえるか、もしくはモニタがわりですかね。

やった!。

2021年8月25日水曜日

中華レーザー改造 大きな板を切りたいのだ 最終編 筐体ご開帳

 

最終段階です。大きな板が通る隙間を作ってゆきます。
これまでに作業した内容ですが、加工台です。
M3ねじを六角レンチで回すことで手動で上下します。



この横軸のロッドが干渉しないように加工台の位置を上げるため、光軸を持ち上げたのでした。さらにM3のイモねじで出っ張りをさらに減じることにしております。
(写真は枠の加工後です。)


次に、アルミのXY軸および外箱に、板が通る部分を切り抜く作業をします。

外箱ですが、とりあえず前面にスロットをデザイン。

ドリルとハンドニブラーで切り抜きます。厚みは0.8-1.0mmぐらいの鉄板ですかね。

すぐ後ろにステッピングモーターがあるので細かいカスはなるべく出ない方がいいかなと思いました。



フレームにも切り欠きを入れます。

これは後ろ側です。



こっちが全面がわです。こちらはフレームを一旦バラしてディスクグラインダー、丸鋸でカット。フレームを組むときに、直角やキャリッジの水平を再度再現するのにえらい手間でした。

一応ポイントを書いておくと

Y軸のフレームーロッド間の距離を一定にして締結する。
10mmだったのでアルミ板を挟んでねじ込みました。
フレームの直角はねじを締めるとずれるレベル。振動で緩まない程度に締結する。
高さについても、外箱の固定の鉄板がグラグラなのでできる範囲で水平に。
X軸機構とキャリッジのバーが、ロッドと直角、水平になるように調整する。
外箱左側面に調節ドライバが入る穴を開けました。



そして諸々組み直して、光軸調整

ここでもポイント
第一ミラーの調節で、以後の光軸が、Y軸ロッドと平行になることを重視する。
どうしてもミラーでの散乱原因がわからなかったのですが、結局第3ミラーの入射部分が中心でなかったため、と判明。高さを調節して、Y軸方向は少し調節の余地があるので、いいところで固定。あとは反射ミラーの向きがかなり影響する。
最終的に鉛直でレンズの真ん中に光軸が近づくように試行錯誤。

ついに!

ダイソーの300x400のMDFボードを飲み込みます。


どこにも干渉しません!!


出来上がりもバッチリです。


入る板が小さくて、あらかじめカットする必要がなくなったので、大変満足です。
ほぼコストはかかっていません。ねじはあちこちでキャップボルトに変えましたが、ありあわせで調達。

あとは吸気とエアアシスト、もう少しなんとかしたいな。