灰度级rk 0 1/7 2/7 3/7 4/7 5/7 6/7 1 像素数nk 560 920 1046 705 356 267 170 72 概率pr(rk) 0.14 0.22 0.26 0.17 0.09 0.06 0.04 0.02
时间: 2023-07-04 07:17:15 浏览: 45
我们可以按照以下步骤进行直方图均衡化:
1. 计算累积分布函数CDF:
```matlab
p = [0.14 0.22 0.26 0.17 0.09 0.06 0.04 0.02];
cdf = cumsum(p);
```
2. 对CDF进行线性映射,得到灰度级映射表map:
```matlab
map = uint8(255 * cdf);
```
3. 对原始图像进行直方图均衡化:
```matlab
img = imread('image.png');
img_eq = histeq(img, map);
```
完整的MATLAB代码如下所示:
```matlab
% 灰度级概率分布
p = [0.14 0.22 0.26 0.17 0.09 0.06 0.04 0.02];
% 计算累积分布函数CDF
cdf = cumsum(p);
% 将CDF映射到0-255范围内
map = uint8(255 * cdf);
% 读取原始图像并进行直方图均衡化
img = imread('image.png');
img_eq = histeq(img, map);
% 显示原始图像和均衡化后的图像
subplot(121), imshow(img), title('Original Image');
subplot(122), imshow(img_eq), title('Equalized Image');
```
其中,'image.png'是指原始图像的文件名,可以替换为实际的文件名。
相关问题
灰度(黑/白标)传感器实验感想
使用灰度传感器进行黑/白标识别是一个非常有趣的实验,通过这个实验,我深刻地认识到了数字信号处理的重要性。在实验过程中,我发现灰度传感器可以将黑白图像转换成数字信号,然后可以通过数字信号处理算法来进行图像处理和识别。这让我感到非常惊奇,因为我之前从来没有想到过数字信号处理在图像识别中的应用。
在实验过程中,我学习了如何使用Arduino开发板进行数字信号处理,以及如何使用灰度传感器进行黑/白标识别。我学会了如何使用Arduino的analogRead()函数读取灰度传感器的模拟信号,并将其转换成数字信号,然后使用数字信号处理算法进行图像处理和识别。
通过这个实验,我还意识到了传感器的重要性,因为传感器可以将现实世界的物理量转换成电信号,并且可以与数字电路和计算机进行交互。在工程应用中,传感器的应用非常广泛,可以用于测量温度、湿度、压力、光强等物理量,然后将这些物理量转换成数字信号,供计算机进行处理和分析。
总的来说,这个实验让我学到了很多关于数字信号处理和传感器的知识,让我对工程应用有了更深入的认识和理解。
c/c++ 单色灰度图YUV420sp格式旋转90度
你可以使用以下代码来旋转一个单色灰度图的 YUV420sp 格式图像 90 度:
```c++
#include <stdio.h>
void rotateYUV420sp90Degree(unsigned char *src, unsigned char *dst, int width, int height) {
int wh = width * height;
int uvHeight = height >> 1;
// 旋转 Y 分量
int k = 0;
for (int i = 0; i < width; i++) {
for (int j = height - 1; j >= 0; j--) {
dst[k++] = src[j * width + i];
}
}
// 旋转 U 和 V 分量
for (int i = 0; i < width; i += 2) {
for (int j = uvHeight - 1; j >= 0; j--) {
dst[k++] = src[wh + j * width + i];
dst[k++] = src[wh + j * width + i + 1];
}
}
}
int main() {
// 假设输入的 YUV420sp 图像是 128x128 大小
int width = 128;
int height = 128;
int wh = width * height;
int uvSize = wh >> 2;
unsigned char *src = new unsigned char[wh + uvSize * 2];
unsigned char *dst = new unsigned char[wh + uvSize * 2];
// 假设将输入的图像初始化为某个值
for (int i = 0; i < wh + uvSize * 2; i++) {
src[i] = i;
}
rotateYUV420sp90Degree(src, dst, width, height);
// 输出旋转后的图像
for (int i = 0; i < wh + uvSize * 2; i++) {
printf("%d ", dst[i]);
}
delete[] src;
delete[] dst;
return 0;
}
```
上述代码使用一个 `rotateYUV420sp90Degree` 函数来旋转 YUV420sp 图像。这个函数首先旋转 Y 分量,然后旋转 U 和 V 分量。在 `main` 函数中,假设输入的图像大小为 128x128,将输入的图像初始化为某个值,然后调用 `rotateYUV420sp90Degree` 函数进行旋转,并打印旋转后的图像数据。
请注意,上述代码仅适用于 YUV420sp 格式的图像,如果输入的图像格式不是 YUV420sp,则需要进行相应的修改。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)