c语言代码实现利用幂律变换灰度变换的代码
时间: 2023-10-10 13:16:03 浏览: 23
可以参考以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAX_GRAY 256 // 灰度等级
int main()
{
char infile[100]; // 输入文件名
char outfile[100]; // 输出文件名
int width, height, maxval; // 图像的宽度、高度、最大灰度值
int i, j, gray; // 循环计数器、灰度值
int hist[MAX_GRAY] = {0}; // 灰度直方图
double P[MAX_GRAY] = {0}; // 灰度概率
int S[MAX_GRAY] = {0}; // 灰度映射
// 读取文件
printf("请输入输入文件名:");
scanf("%s", infile);
printf("请输入输出文件名:");
scanf("%s", outfile);
FILE *fpin = fopen(infile, "rb");
FILE *fpout = fopen(outfile, "wb");
if (fpin == NULL || fpout == NULL) {
printf("文件打开失败!\n");
exit(1);
}
char magic[2];
fscanf(fpin, "%s", magic); // 文件类型
if (strcmp(magic, "P5")) {
printf("文件格式不正确!\n");
exit(1);
}
fscanf(fpin, "%d %d %d", &width, &height, &maxval); // 文件头信息
unsigned char image[height][width]; // 存储图像数据
fread(image, 1, height*width, fpin); // 读取图像数据
// 计算灰度直方图
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
gray = image[i][j];
hist[gray]++;
}
}
// 计算灰度概率
for (i = 0; i < MAX_GRAY; i++) {
P[i] = (double)hist[i] / (height * width);
}
// 计算累积分布函数
S[0] = round((MAX_GRAY - 1) * P[0]);
for (i = 1; i < MAX_GRAY; i++) {
S[i] = round((MAX_GRAY - 1) * P[i]) + S[i-1];
}
// 灰度映射
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
gray = image[i][j];
image[i][j] = S[gray];
}
}
// 写入文件
fprintf(fpout, "P5\n%d %d\n%d\n", width, height, MAX_GRAY-1);
fwrite(image, 1, height*width, fpout);
// 关闭文件
fclose(fpin);
fclose(fpout);
printf("处理完成!\n");
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)