C实现椒盐噪声生成

实现代码如下:

void salt_peper_noise(uint8_t* gray, int width, int height)
{
    uint8_t* img;
    int i, j;
    int low;
    int h;
    int tmp;
    uint32_t n;
    img = gray;
    n = width * height;
    low = RAND_MAX >> 7;
    h = RAND_MAX - low;
    for (i = 0; i < height; i++)
    {
        for (j = 0; j < width; j++)
        {
            tmp = rand() % n;
            if (tmp < low)
            {
                *img = 0;
            }
            if (tmp >  h)
            {
                *img = 255;
            }
            img++;
        }
    }
}

上面实现的是灰度图像,彩色图像类似。
效果如下:
这里写图片描述

椒盐噪声是一种常见的图像处理问题,如果要在 C 语言中标记椒盐噪声代码,可以使用以下方法: 1. 随机生成椒盐噪声:在图像中随机选取一些像素点,将它们的像素值设为最小值或最大值,从而产生椒盐噪声。可以使用 rand() 函数来生成随机数。 2. 均值滤波去除椒盐噪声:使用均值滤波器可以有效地去除椒盐噪声。对于每个像素点,取其周围像素的平均值作为新的像素值。在 C 语言中,可以使用双重循环来实现均值滤波。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #define WIDTH 640 #define HEIGHT 480 int main() { // 生成随机椒盐噪声 unsigned char image[HEIGHT][WIDTH]; for (int y = 0; y < HEIGHT; y++) { for (int x = 0; x < WIDTH; x++) { if (rand() % 100 < 5) { image[y][x] = 0; // 最小值 } else if (rand() % 100 > 95) { image[y][x] = 255; // 最大值 } else { image[y][x] = rand() % 256; // 随机值 } } } // 均值滤波去除椒盐噪声 unsigned char filtered[HEIGHT][WIDTH]; for (int y = 0; y < HEIGHT; y++) { for (int x = 0; x < WIDTH; x++) { int sum = 0; int count = 0; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { int yy = y + i; int xx = x + j; if (yy >= 0 && yy < HEIGHT && xx >= 0 && xx < WIDTH) { sum += image[yy][xx]; count++; } } } filtered[y][x] = sum / count; } } // 输出结果 printf("原始图像\t\t\t\t\t\t去噪后的图像\n"); for (int y = 0; y < HEIGHT; y++) { for (int x = 0; x < WIDTH; x++) { putchar(image[y][x] < 128 ? ' ' : '*'); } putchar('\t'); for (int x = 0; x < WIDTH; x++) { putchar(filtered[y][x] < 128 ? ' ' : '*'); } putchar('\n'); } return 0; } ``` 在这个示例代码中,我们首先使用 rand() 函数生成随机的椒盐噪声,然后使用双重循环实现了均值滤波算法,最后输出了原始图像和去噪后的图像。你可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值