Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
刘韬
/
CarerayImage
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 894ec6ca
由
刘韬
编写于
2024-03-21 09:18:26 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1
1 个父辈
c9cecc48
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
91 行增加
和
23 行删除
CarerayImage/CarerayImage.csproj
CarerayImage/haobo_v2.cs
CarerayImage_Test/Form1.cs
CarerayImage/CarerayImage.csproj
查看文件 @
894ec6c
...
...
@@ -13,6 +13,8 @@
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
...
...
CarerayImage/haobo_v2.cs
查看文件 @
894ec6c
...
...
@@ -3,6 +3,7 @@ using ConfigHelper;
using
System
;
using
System.Collections.Generic
;
using
System.Drawing
;
using
System.Drawing.Imaging
;
using
System.IO
;
using
System.Linq
;
using
System.Runtime.InteropServices
;
...
...
@@ -123,14 +124,15 @@ namespace Asa
/// <summary>
/// 窗宽
/// </summary>
public
int
WindowWidth
{
set
;
get
;
}
=
65535
;
public
int
WindowWidth
{
set
;
get
;
}
=
38337
;
//
65535;
/// <summary>
/// 窗位
/// </summary>
public
int
WindowLevel
{
set
;
get
;
}
=
32768
;
public
int
WindowLevel
{
set
;
get
;
}
=
3
0812
;
// 3
2768;
public
Bitmap
Get48bImage
()
{
//ConvertRawToPng(buffer, 3072, 3072, "d:\\test.tiff");
if
(
buffer
==
null
)
return
null
;
if
(
ImageWidth
<=
0
||
ImageHeight
<=
0
)
{
...
...
@@ -138,6 +140,9 @@ namespace Asa
return
null
;
}
//var (WindowWidth, WindowLevel) = CalculateWindowLevel(buffer);
int
count
=
ImageWidth
*
ImageHeight
;
byte
[]
gray
=
new
byte
[
count
*
2
];
Array
.
Copy
(
buffer
,
0
,
gray
,
0
,
gray
.
Length
);
...
...
@@ -151,25 +156,25 @@ namespace Asa
short
point
=
BitConverter
.
ToInt16
(
gray
,
idx1
);
//point += 20000;
if
(
point
<
WindowLevel
-
half
)
{
buff
[
idx2
++]
=
0
;
buff
[
idx2
++]
=
0
;
buff
[
idx2
++]
=
0
;
buff
[
idx2
++]
=
0
;
buff
[
idx2
++]
=
0
;
buff
[
idx2
++]
=
0
;
}
else
if
(
point
>
WindowLevel
+
half
)
{
buff
[
idx2
++]
=
255
;
buff
[
idx2
++]
=
255
;
buff
[
idx2
++]
=
255
;
buff
[
idx2
++]
=
255
;
buff
[
idx2
++]
=
255
;
buff
[
idx2
++]
=
255
;
}
else
//
if (point < WindowLevel - half)
//
{
//
buff[idx2++] = 0;
//
buff[idx2++] = 0;
//
buff[idx2++] = 0;
//
buff[idx2++] = 0;
//
buff[idx2++] = 0;
//
buff[idx2++] = 0;
//
}
//
else if (point > WindowLevel + half)
//
{
//
buff[idx2++] = 255;
//
buff[idx2++] = 255;
//
buff[idx2++] = 255;
//
buff[idx2++] = 255;
//
buff[idx2++] = 255;
//
buff[idx2++] = 255;
//
}
//
else
{
byte
[]
bb
=
BitConverter
.
GetBytes
(
point
);
buff
[
idx2
++]
=
bb
[
0
];
...
...
@@ -194,6 +199,67 @@ namespace Asa
return
bmp
;
}
public
(
int
windowWidth
,
int
windowCenter
)
CalculateWindowLevel
(
byte
[]
imageData
)
{
int
minValue
=
ushort
.
MaxValue
;
int
maxValue
=
ushort
.
MinValue
;
// 计算图像的最大值和最小值
for
(
int
i
=
0
;
i
<
imageData
.
Length
;
i
+=
2
)
{
ushort
pixelValue
=
BitConverter
.
ToUInt16
(
imageData
,
i
);
if
(
pixelValue
<
minValue
)
{
minValue
=
pixelValue
;
}
if
(
pixelValue
>
maxValue
)
{
maxValue
=
pixelValue
;
}
}
// 计算直方图
int
[]
histogram
=
new
int
[
maxValue
-
minValue
+
1
];
for
(
int
i
=
0
;
i
<
imageData
.
Length
;
i
+=
2
)
{
ushort
pixelValue
=
BitConverter
.
ToUInt16
(
imageData
,
i
);
histogram
[
pixelValue
-
minValue
]++;
}
// 动态范围压缩
int
totalPixels
=
imageData
.
Length
/
2
;
int
threshold
=
totalPixels
/
1000
;
// 设置一个阈值,表示较小的像素值数量的百分比
int
accumulatedPixels
=
0
;
int
lowerBound
=
minValue
;
int
upperBound
=
maxValue
;
for
(
int
i
=
0
;
i
<
histogram
.
Length
;
i
++)
{
accumulatedPixels
+=
histogram
[
i
];
if
(
accumulatedPixels
>
threshold
)
{
lowerBound
=
i
+
minValue
;
break
;
}
}
accumulatedPixels
=
0
;
for
(
int
i
=
histogram
.
Length
-
1
;
i
>=
0
;
i
--)
{
accumulatedPixels
+=
histogram
[
i
];
if
(
accumulatedPixels
>
threshold
)
{
upperBound
=
i
+
minValue
;
break
;
}
}
// 计算最佳窗宽和窗位
int
windowWidth
=
upperBound
-
lowerBound
;
int
windowCenter
=
(
upperBound
+
lowerBound
)
/
2
;
return
(
windowWidth
,
windowCenter
);
}
CancellationTokenSource
WaitstopToken
=
new
CancellationTokenSource
();
volatile
bool
buffgetted
=
false
;
int
getpiccount
=
0
;
...
...
@@ -950,7 +1016,7 @@ namespace Asa
//}
Marshal
.
Copy
(
imagedata
.
databuff
,
buffer
,
0
,
bufflen
);
string
fileName
=
Directory
.
GetCurrentDirectory
()
+
"\\current.raw"
;
string
fileName
=
Path
.
Combine
(
AppDomain
.
CurrentDomain
.
BaseDirectory
,
"current.raw"
)
;
File
.
WriteAllBytes
(
fileName
,
buffer
);
// 图片信息
WriteLog
(
string
.
Format
(
"SaveImage success:0x{0:X000}\n"
,
nframeId
));
...
...
CarerayImage_Test/Form1.cs
查看文件 @
894ec6c
...
...
@@ -26,7 +26,7 @@ namespace CarerayImage_Test
private
void
Form1_Load
(
object
sender
,
EventArgs
e
)
{
xrayImage
=
new
Asa
.
XrayImage
(
"123"
,
Asa
.
XrayImage
.
DeviceType
.
HAOBO
);
xrayImage
=
new
Asa
.
XrayImage
(
"123"
,
Asa
.
XrayImage
.
DeviceType
.
HAOBO
_V2
);
}
private
void
button1_Click
(
object
sender
,
EventArgs
e
)
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论