首页 > 编程语言 >Photoshop图像算法(四)(代码在每个原理后面)

Photoshop图像算法(四)(代码在每个原理后面)

时间:2024-10-24 10:46:34浏览次数:9  
标签:Photoshop src int 模糊 像素 ++ 算法 图像

色彩均衡化

色彩均衡化(或称为直方图均衡化)是一种图像处理技术,目的是改善图像的对比度,使图像中的细节更加明显。它通过重新分配颜色通道的像素值,使得图像的直方图分布更均匀。以下是其基本原理:

原理

  1. 直方图计算

    • 首先计算图像的颜色直方图,即统计每个像素值出现的频率。对于每个颜色通道(红、绿、蓝),都会生成一个直方图。
  2. 累积分布函数(CDF)

    • 计算每个颜色通道的累积分布函数。CDF 是对直方图的累加,用于描述某个像素值及以下的所有像素所占的比例。
  3. 归一化

    • 将 CDF 归一化到 0 到 255 的范围(对于8位图像),这样就能将累积的频率转换为新的像素值。
  4. 映射

    • 使用归一化后的 CDF,将原图像中的每个像素值映射到新的像素值。具体来说,对于每个像素,根据其原始值查找 CDF,得到新的值,从而完成均衡化。
  5. 重建图像

    • 使用新的像素值构建一幅新的图像,这幅图像的直方图分布更加均匀,增强了整体的对比度。

应用

色彩均衡化通常用于:

  • 改善低对比度图像的可视性。
  • 处理医学影像、卫星图像等需要突出细节的图像。

注意事项

  • 伪彩色问题:对彩色图像进行均衡化时,可以单独对每个通道进行,也可以转换到不同的颜色空间(如HSV、Lab等)进行均衡化,然后再转换回RGB。
  • 局部均衡化:可以使用局部均衡化(如自适应直方图均衡化,CLAHE)来处理局部对比度差异,避免全局均衡化带来的过度增强。

总结

色彩均衡化是一个强大的工具,能够通过调整图像中的像素分布来改善图像的视觉效果。在实际应用中,可以结合其他图像处理技术来获得更好的效果。

Mat Equalizer(Mat src) {
	int row = src.rows;
	int col = src.cols;
	int Count[256] = { 0 };
	float p[256] = { 0 };
	float fSum[256] = { 0 };
	int level[256] = { 0 };
	int Total = row * col * 3;
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			for (int k = 0; k < 3; k++) {
				Count[src.at<Vec3b>(i, j)[k]]++;
			}
		}
	}
	for (int i = 0; i < 256; i++) {
		p[i] = 1.0 * Count[i] / (1.0 * Total);
		if (i == 0)
			fSum[0] = p[0];
		else
			fSum[i] = fSum[i - 1] + p[i];
		level[i] = saturate_cast<uchar>(255 * fSum[i] + 0.5);
	}
	Mat dst(row, col, CV_8UC3);
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			for (int k = 0; k < 3; k++) {
				dst.at<Vec3b>(i, j)[k] = level[src.at<Vec3b>(i, j)[k]];
			}
		}
	}
	return dst;
}

PS中值模糊

中值模糊是一种图像处理技术,常用于去噪声和图像平滑。在Photoshop中的模糊滤镜中,中值模糊通过替换每个像素的值为其邻域像素值的中值,来达到模糊效果。其算法原理可以简单概括如下:

中值模糊算法原理

  1. 选择窗口:对于每个像素,选择一个窗口(如3x3、5x5等),包括该像素及其周围像素。窗口大小决定了模糊效果的程度,窗口越大,模糊效果越明显。

  2. 提取邻域像素值:在选定的窗口内,提取出所有的像素值。

  3. 计算中值

    • 对提取的像素值进行排序。
    • 找到中间的值,这个值称为中值。在奇数个像素的情况下,中值为排序中间位置的值;在偶数个像素的情况下,可以取中间两个数的平均值。
  4. 替换像素值:将当前素的值替换为计算得到的中值。

  5. 逐步处理图像:对图像中的每一个像素重复以上步骤,直到处理完整个图像。

优点与应用

  • 去噪能力强:中值模糊特别有效于去除椒盐噪声。
  • 边缘保留:相较于其他模糊算法(如高斯模糊),中值模糊在保持边缘信息上更具优势。

注意事项

  • 处理速度:由于需对每个像素都进行排序,计算复杂度较高。在大图像和大窗口时,处理时间会显著增加。
  • 选择窗口大小:合适的窗口大小可以使模糊效果更自然,过大的窗口可能会导致细节过度模糊。

中值模糊在图像处理领域广泛应用,尤其在图像噪声减少和图像预处理等方面。

Mat MedianFilter(Mat src, int ksize) {
	int row = src.rows;
	int col = src.cols;
	int border = (ksize - 1) / 2;
	int mid = (ksize*ksize - 1) / 2;
	Mat dst(row, col, CV_8UC3);
	for (int i = border; i < row - border; i++) {
		for (int j = border; j < col - border; j++) {
			for (int k = 0; k < 3; k++) {
				vector <int> v;
				for (int x = -border; x <= border; x++) {
					for (int y = -border; y <= border; y++) {
						v.push_back(src.at<Vec3b>(i + x, j + y)[k]);
					}
				}
				sort(v.begin(), v.end());
				dst.at<Vec3b>(i, j)[k] = v[mid];
			}
		}
	}
	return dst;
}

PS运动模糊

运动模糊(Motion Blur)是一种在摄影和图像编辑中常用的效果,它模拟了在快速运动中的物体拍摄时因快门速度较慢而导致的模糊效果。在Adobe Photoshop中,运动模糊的效果可以通过应用特定的滤镜来实现。以下是运动模糊效果的基本原理和实现方法:

原理:

  1. 快门速度:当物体以较高速度移动时,快门捕捉到的图像会出现模糊,这是因为在曝光时间内,物体位于不同的位置。
  2. 方向和速度:运动模糊不仅依赖于速度,还与物体移动的方向相关。模糊的方向通常与物体移动的方向一致,而模糊的强度与物体的速度成正比。
  3. 光线的牵引效应:在摄影中,快速移动的物体会在图像中留下光线轨迹,形成流畅的模糊效果。这种效果可以增强动态感,使静态图像看起来更生动。

在Photoshop中实现运动模糊:

  1. 选择图层:打开你想要编辑的图像,并选择需要应用运动模糊的图层。
  2. 应用运动模糊滤镜
    • 前往菜单选择滤镜 > 模糊 > 运动模糊
    • 在弹出的对话框中,可以调整模糊的角度和距离。角度决定模糊的方向,距离则决定模糊的强度。
  3. 调整效果:根据需要进行细微调整,可以使用图层蒙版等工具来控制模糊效果的应用区域。
  4. 其他技巧:结合图层样式、透明度或其他滤镜,可以进一步增强运动模糊效果。例如,在运动模糊的基础上添加一些光晕或色调变化,可以让图像更具视觉冲击力。

总结:

运动模糊效果在Photoshop中通过模拟光线在快速移动物体上的表现来增加图像的动感和速度感。掌握运动模糊的滤镜及其参数调整,可以帮助用户在创作中更好地表现运动和速度。


//添加运动模糊效果
//angle:运动的方向,distance:运动的距离
//这里只是粗略的计算,以dx的长度为准,也可以以dy或者dx+dy等长度微赚
Mat MotionBlur(const Mat &src, int angle = 30, int distance = 100) {
	if (distance < 1) distance = 1;
	else if (distance > 200) distance = 200;
	double radian = ((double)angle + 180.0) / 180.0 * PI;
	int dx = (int)((double)distance * cos(radian) + 0.5);
	int dy = (int)((double)distance * sin(radian) + 0.5);
	int sign;
	if (dx < 0) sign = -1;
	if (dx > 0) sign = 1;
	int height = src.rows;
	int width = src.cols;
	int chns = src.channels();
	Mat dst;
	dst.create(height, width, src.type());
	for (int i = 0; i < height; i++) {
		unsigned  char* dstData = (unsigned char*)dst.data + dst.step * i;
		for (int j = 0; j < width; j++) {
			for (int k = 0; k < chns; k++) {
				int sum = 0, count = 0;
				for (int p = 0; p < abs(dx); p++) {
					int i0 = i + p*sign;
					int j0 = j + p*sign;
					if (i0 >= 0 && i0 < height && j0 >= 0 && j0 < width) {
						count++;
						sum += src.at<Vec3b>(i0, j0)[k];
					}
				}
				if (count == 0) {
					dstData[j*chns + k] = src.at<Vec3b>(i, j)[k];
				}
				else {
					dstData[j*chns + k] = int(sum / (double)count + 0.5);
					if (dstData[j*chns + k] < 0) dstData[j*chns + k] = 0;
					else if (dstData[j*chns + k] > 255) dstData[j*chns + k] = 255;
				}
			}
		}
	}
	return dst;
}

更多PS代码请关注我上传的资源文件。

https://download.csdn.net/download/m0_44975814/89896121

标签:Photoshop,src,int,模糊,像素,++,算法,图像
From: https://blog.csdn.net/m0_44975814/article/details/143186032

相关文章

  • 智能修图软件:Perfectly Clear Workbench AI图像清晰修复软件「mac +win】
    PerfectlyClearWorkbench是一款专为Mac和Windows用户打造的智能图像清晰修复软件。它采用先进的人工智能和机器学习算法,自动识别并修复图像中的曝光不足、色偏、噪点等问题。软件内置丰富的预设和一键增强功能,支持批量处理,大幅提高工作效率。同时,它也提供手动调整选项,满足用户......
  • [图像处理] 基于CleanVision库清洗图像数据集
    CleanVision是一个开源的Python库,旨在帮助用户自动检测图像数据集中可能影响机器学习项目的常见问题。该库被设计为计算机视觉项目的初步工具,以便在应用机器学习之前发现并解决数据集中的问题。CleanVision的核心功能包括检测完全重复、近似重复、模糊、低信息量、过暗、过亮、灰......
  • 局部路径规划(Local planning)算法之——TEB轨迹规划
    1TEB算法原理TEB全程为TimeElasticBand(时间弹力带),通过对给定的全局轨迹进行修正,从而优化机器人的局部运动轨迹。他是常用的局部路径规划方法之一。TEB是基于图优化的方法,以g2o优化框架实现,它以机器人在各个离散时间的位姿和离散时刻之间的时间间隔为顶点,通过多目标优化,包括......
  • 2024年计算机科学与智能算法国际论坛(CSIA 2024) 2024 International Symposium on C
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus三、大会介绍2024年计算机科学与智能算法国际论坛(CSIA2024)将作为主会议第六届智能控制、测......
  • 强化学习算法性能度量的常用方法
    本文介绍一下强化学习中的常用性能度量方法,或者说是强化学习中常用的性能测量标准。常用的两种RL训练过程中的算法性能度量方法/性能测试方法(两种性能曲线图的绘制):训练过程中不对训练过程进行暂停,不单独测试算法性能而是使用训练过程的性能表现作为算法的性能表现,具体为取训......
  • LVS三种模式区别及负载均衡算法
    LVS简介LVS(LinuxVirtualServer)即linux虚拟服务器,是一个虚拟的服务器集群系统正向代理和反向代理 正向代理:只用于代理内部网络对internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到web服务器上的http请求发送到代理服务器,正向代理指的是客户端代理 反向代......
  • 计算机毕业设计Spark+大模型某音视频情感分析 某音可视化 某音舆情监测 预测算法 某音
    《Spark+大模型抖音视频情感分析》开题报告一、研究背景与意义随着移动互联网和社交媒体的快速发展,短视频平台如抖音(TikTok)已成为全球范围内广受欢迎的娱乐和信息获取渠道。用户在这些平台上发布的视频内容涵盖了娱乐、教育、新闻等各个领域,形成了海量的用户行为数据和视频内......
  • [快速阅读八] Matlab中bwlookup的实现及其在计算二值图像的欧拉数、面积及其他morph变
    以前看过matlab的bwlookup函数,但是总感觉有点神秘,一直没有去仔细分析,最近在分析计算二值图像的欧拉数时,发现自己写的代码和matlab的总是对不少,于是又去翻了下matlab的源代码,看到了matlab里实现欧拉数的代码非常简单,如下所示:ifn==4lut=4*[00.250.2500.250.5-......
  • 代码随想录算法训练营第二十四天|Day24 回溯算法
    93.复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/思路char**result;intresultTop;intsegments[3];intisValid(char*s,intstart,intend){......
  • 视频监控ai垃圾箱满溢监测算法系统
    视频监控AI垃圾箱满溢监测算法系统基于先进的AI智能算法,视频监控ai垃圾箱满溢监测算法系统在垃圾投放点安装了AI监控摄像头和音柱设备,通过视频监控和智能分析算法实现对垃圾分类投放过程的实时监测和识别。系统可以识别垃圾乱投的情况,检测垃圾箱是否满溢,判断厨余垃圾是否破袋以及......