分辨率单位及换算,LW / PH、LP / mm、L / mm、Cycles / mm、Cycles / pixel、LP / PH

分辨率单位及换算,LW / PH、LP / mm、L / mm、Cycles / mm、Cycles / pixel、LP / PH

对于测试数字成像设备非常重要的参数是分辨率。但有不同的方式来表达数码相机的分辨率,有时令人困惑。下面介绍的是是最常见的单位。

百万像素

“这台相机有1000万像素的分辨率”是我们经常在广告上看到的数据,但是从技术上看,这是错误的。一个1000万像素的相机有一千万像素,可以采集镜头投射到传感器上的图像。但这并不意味着,每个像素真的拥有关于图像内容的有用信息。所以像素的数量与分辨率有些相关,但是没有定义它。一个好的1000万像素摄像机与12或14万像素摄像机相比,具有相同的分辨率并不罕见。

LP /mm

指的是镜头的分辨率计算单位,是镜头对于成像质量传递的评判标准;在模拟时代中,胶片和/或镜头的分辨率以每毫米线对(LP / mm)表示。此单位表示在传感器/胶片平面中,您可以在一毫米内找到的线对数量。一条线对是一条黑线和一条白色的线,方向相同,宽度相同。如果镜头的分辨率为100 LP / mm,则表示在胶片(或传感器)上投影1毫米内有100条黑线和100条白线。在数字时代中,数字值没有物理范围,只有其在屏幕上或打印中的表示。所以你不能用这个单位来表达数字图像的分辨率。您可以使用LP / mm来表示镜头的分辨率。但是在这种情况下,您需要知道设备中使用的传感器的确切尺寸,有时很难发现,如果无法打开设备,大部分时间都不可能。

LP / pix(cy / px)

正如我们已经表明,LP / mm不是数码相机可以捕捉的分辨率的合适单位,需要不同的单位。一个非常常见的单位是每个像素的线对或每个像素的周期。在这种情况下,我们没有单位的物理范围,我们只描述一个像素可以解析多少个线对。由于线对总是黑线和白线,因此可以达到的最大分辨率是1/2 LP / pix。所以如果一台相机可以解析0.4LP /像素,它将达到其理论最大分辨率的80%。这样,人们可以很容易地比较两个相机,看看他们如何利用他们拥有的像素量。

LP / PH

如果只用LP / pix表示分辨率,则不考虑采样本身会降低分辨率。所以如果你有0.5 LP / pix的照相机A和0.4 LP / pix的照相机B,你会说A比B好。但是如果照相机A只有320像素,而照相机A有2000像素,那么照相机B一定会在同一场景中显示更多细节。因此,为了使测试结果与效率(LP / pix)和像素组合的数量相媲美,将分辨率表示为每个图像高度的线对。在这个例子中,这将导致160 LP / PH到800 LP / PH的比较。

PPI

扫描仪更喜欢另一个单位:PPI,每英寸像素。在扫描仪的情况下,它表示扫描原稿的一英寸(25.4毫米)的像素数量。所以如果你测试该设备的分辨率,你需要知道你扫描的对象的大小。PPI类似于“像素”。它给出了一英寸的像素量,但这并不意味着这些像素保存有用的信息。根据我们的经验,大多数扫描仪不能达到PPI中定义的预期采样率。所以对于扫描仪来说,检查LP / pix是非常麻烦的,因为这会给你扫描仪的性能。许多扫描仪接近0.5 LP / pix为200 PPI,但是在300 PPI或甚至400 PPI的情况下要少得多。只是提及,因为它经常混淆和使用错误:DPI不同于PPI。喷墨打印机可以具有非常高的DPI(每英寸点数)。

兆赫

兆赫作为空间分辨率的单位?在模拟视频中,兆赫是已知的分辨率单位,因为每条线具有明确的时间。除了数字视频之外,传输信号时没有明确定义的像素。因此,您可以以μ秒为单位更好地表示图像的宽度,如果用毫秒代替LP / mm中的毫米,则最终以兆赫为单位。


*测量MTF和/或SFR有几种方法,所有这些方法都有各自的优点和缺点。
 
分辨率的单位及转换
分辨率是使用斜边,西门子星或其他具有增加频率的常规结构来测量的。诸如LW / PH,LP / PH或每像素周期的单位与传感器尺寸和像素间距无关。他们只是把结果图像和频率内容考虑在内,而不是关心每个像素的大小。像LP / mm,L / mm或Cycles / mm这样的尺寸需要关于传感器尺寸/像素间距的知识。

下面的表格和解释将成为即将到来的ISO 12233修订版的一部分


LW / PH =每个图像高度的线宽
LP / mm =每毫米线对
L / mm =每毫米线数
Cycles / mm =每毫米周期
Cycles / pixel =每像素周期
LP / PH =每个图像高度的线对

要从左列单元转换到上排单元,请在其行/列交叉点处使用操作。


空间频率单位转换图

LW / PHLP /毫米L /毫米周期/毫米循环/像素LP / PH
LW / PHx 1/ [2倍图片高度]/图片高度/ [2倍图片高度]/ [2 x#vert。像素]/ 2.0
LP /毫米x [2倍图像高度]x 1x 2.0x 1x像素间距x [图片高度]
L /毫米x图片高度x 0.5x 1x 0.5x [像素间距/ 2]x [图片高度/ 2]
周期/毫米x [2倍图像高度]x 1x 2.0x 1x像素间距x [图片高度]
循环/像素x [2 x#vert。像素]/像素间距x [2 /像素间距]/像素间距x 1x [#vert。像素]
LP / PHx 2.0/图片高度2 /图片高度/图片高度/#vert。像素X1


注1:

45度对角线方向上的像素间距不同于垂直和水平方向上的像素间距。因此,将该表应用于对角线方向上的测量时使用对角像素间距。

注2:
有三个平面用于确定分辨率,例如LP / mm。它可以在物体空间,传感器平面或具有给定输出放大倍数的图像中。在大多数情况下,传感器平面上的分辨率是重要的。为了在这种情况下获得正确的值,应该将图像文件缩放到传感器尺寸,在这种情况下,传感器上的像素间距等于图像文件中的像素间距。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用按键、LED和UART实现抢答器的示例代码,供参考: ```c #include <msp430.h> #include <stdio.h> #define UART_TXD BIT2 // UART输出引脚 #define UART_BAUDRATE 9600 // UART波特率 #define LED1 BIT0 // LED1引脚 #define LED2 BIT6 // LED2引脚 #define BUTTON BIT3 // 按键引脚 #define TIMER_INTERVAL 32768 // 定时器计数器值 #define TIMER_DELAY 10 // 抢答持续时间(秒) volatile unsigned int timer_count = 0; // 定时器计数器 volatile unsigned int button_pressed = 0; // 按键是否被按下 volatile unsigned int button_released = 0; // 按键是否被释放 volatile unsigned int button_acknowledged = 0; // 按键是否被确认 void uart_init() { P1SEL |= UART_TXD; // 选择UART输出引脚 P1SEL2 |= UART_TXD; UCA0CTL1 |= UCSWRST; // 复位UART控制器 UCA0CTL1 |= UCSSEL_2; // 选择SMCLK作为时钟源 UCA0BR0 = 104; // 设置波特率 UCA0BR1 = 0; UCA0MCTL = UCBRS0; // 设置调制解调器 UCA0CTL1 &= ~UCSWRST; // 启动UART控制器 } void uart_send(char *data) { while (*data) // 循环发送数据 { while (!(IFG2 & UCA0TXIFG)); // 等待UART发送缓冲器就绪 UCA0TXBUF = *data++; // 发送数据 } } void led_init() { P1DIR |= LED1 | LED2; // 设置LED引脚为输出模式 P1OUT &= ~(LED1 | LED2); // 关闭LED } void button_init() { P1DIR &= ~BUTTON; // 设置按键引脚为输入模式 P1REN |= BUTTON; // 启用内部上拉电阻 P1OUT |= BUTTON; // 设置内部上拉电阻为高电平 P1IES |= BUTTON; // 设置下降沿触发 P1IFG &= ~BUTTON; // 清除按键中断标志 P1IE |= BUTTON; // 启用按键中断 } void timer_init() { TA0CTL = TASSEL_1 | MC_1 | TACLR; // 选择ACLK作为时钟源,启用连续计数模式,清除计数器 TA0CCR0 = TIMER_INTERVAL; // 设置计数器值 TA0CCTL0 = CCIE; // 启用计时器中断 } #pragma vector=PORT1_VECTOR // 按键中断函数 __interrupt void button_isr() { if (!(P1IN & BUTTON)) // 如果按键被按下 { button_pressed = 1; // 设置按键已被按下标志 P1IFG &= ~BUTTON; // 清除按键中断标志 } else // 如果按键被释放 { button_released = 1; // 设置按键已被释放标志 } } #pragma vector=TIMER0_A0_VECTOR // 计时器中断函数 __interrupt void timer_isr() { timer_count++; // 计数器自增 if (timer_count >= TIMER_DELAY) // 如果抢答时间到 { if (button_pressed) // 如果有人抢答成功 { P1OUT |= LED1; // 打开LED1 uart_send("success"); // 发送抢答成功信息 } else // 如果没有人抢答成功 { P1OUT |= LED2; // 打开LED2 uart_send("fail"); // 发送抢答失败信息 } button_acknowledged = 1; // 设置按键已被确认标志 timer_count = 0; // 重置计数器 } } int main() { WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗定时器 uart_init(); // 初始化UART led_init(); // 初始化LED button_init(); // 初始化按键 timer_init(); // 初始化计时器 __enable_interrupt(); // 启用中断 while (1) { if (button_acknowledged) // 如果按键已被确认 { button_pressed = 0; // 重置按键状态 button_released = 0; button_acknowledged = 0; P1OUT &= ~(LED1 | LED2); // 关闭LED __delay_cycles(1000000); // 延迟一段时间,避免按键抖动 } } } ``` 在上述代码中,我们使用MSP430微控制器实现了抢答器功能。其中,使用了按键中断、定时器中断、LED输出和UART通信功能。通过这些功能的组合,我们可以实现一个简单的抢答器,用于课堂或会议等场合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值