
正文
中值虑波java代码 中值滤波程序代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java图像去噪怎么实现?
流程不外乎是
读取图像文件;
扫描噪点;
去除噪点;
保存图像文件。
Java2D操作好像使用BufferedImage读取图像文件最方便,有一阵没弄这了,忘了。应该可以读取JPG,PNG,GIF图像。
识别噪点应该有专门的算法,我没研究过,百度一下应该能找到专门算法,然后写段代码就可以。我个人以为是独立一个像素与周围一定范围内的像素差异过大,就认为是噪点。可以有亮度,色相上的差别。BufferedImage可以读取每个像素的RGB,从而能识别色相的差别;还有个矩阵,用来由RGB计算亮度的,也就可以计算亮度差别了,这个网上都能找到。
输出也使用BufferedImage就可以。
关键是每个像素都要和周围像素比较,还要计算亮度,最少是三重循环了,如何提高效率是个大问题了。这个代码写好了也算一个高手了。
相关问答
Q1: 急!!,二值化后的图像,用JAVA中值滤波算法,去除椒盐噪点!!!
椒盐噪声中值虑波java代码的话一般可以用中值滤波器去除, 中值滤波器很容易实现, 依此遍历图像中每个像素点, 每个像素点与其周围的8个点像素值做一下排序操作, 找到这九个点中的中值点赋给当前遍历点的像素就可以中值虑波java代码了, 算法很简单吧. 中值虑波java代码我这有c++的源码, 楼主要想要的话发邮件到中值虑波java代码我的邮箱769569350@qq.com我可以把程序发给中值虑波java代码你.
Q2: 急求中值滤波的伪代码(300分)?
unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterH,int iFilterW)
{
/* unsigned char m = mid(
mid(bArray[0],bArray[1],bArray[2]),
mid(bArray[3],bArray[4],bArray[5]),
mid(bArray[6],bArray[7],bArray[8]));
return m;*/
// 循环变量
int i;
int j;
int k;
// 中间变量
unsigned char bTemp;
int iFilterLen=iFilterH*iFilterW;
float average=0;//用于均值加速
//求均值
for (i=0;iiFilterLen;i++)
{
average+=bArray[i];
}
average=average/iFilterLen;
unsigned char pixel_mid;
pixel_mid=bArray[(iFilterH-1)/2*iFilterW+(iFilterW-1)/2];//滤波窗口中心中值虑波java代码的取中值前中值虑波java代码的像素值
if (abs(average-pixel_mid)10) //均值加速中值虑波java代码,其中“10”为原中值和均值之差中值虑波java代码,根据中值虑波java代码你的实际情况自行设置大小
//if(1) //不用均值加速时选此
{
//超快速中值法(本质就是伪中值法)
//行排列
if (0)
{
for (k = 0; k iFilterH; k ++)
{
for (j = 0; j iFilterH-1; j ++)
{
for (i = 0; i iFilterW-1-j; i++)
{
number++;
if (bArray[i+iFilterH*k] bArray[i+iFilterH*k+1])
{ // 互换
bTemp = bArray[i+iFilterH*k];
bArray[i+iFilterH*k] = bArray[i+iFilterH*k+1];
bArray[i+iFilterH*k+1] = bTemp;
}
}
}
}
//列排列
// for (k = 0; k iFilterW; k ++)
//{
k=(iFilterW-1)/2;
for (j = 0; j iFilterH-1; j ++)
{
for (i = 0; i iFilterW-1-j; i++)
{
number++;
if (bArray[k+iFilterW*i] bArray[k+iFilterW*(i+1)])
{
// 互换
bTemp = bArray[k+iFilterW*i];
bArray[k+iFilterW*i] = bArray[k+iFilterW*(i+1)];
bArray[k+iFilterW*(i+1)] = bTemp;
}
}
}
}
else
{
//传统冒泡法获取中值
if(0)
{for (j = 0; j iFilterLen - 1; j ++)
{
for (i = 0; i iFilterLen - j - 1; i ++)
{
number++;
if (bArray[i] bArray[i + 1])
{
// 互换
bTemp = bArray[i];
bArray[i] = bArray[i + 1];
bArray[i + 1] = bTemp;
}
}
}
}
else
{
quickSort(bArray,0,iFilterLen-1);//快速排序法
}
}
}
//else
// 计算中值。注:本程序的数组均为奇数个元素
bTemp=bArray[(iFilterLen -1) / 2];
// 返回中值
return bTemp;
}
void quickSort(unsigned char a[], int l, int r)
{// 排序a [ l : r ], a[r+1] 有大值
int t;
if (l = r) return;
int i = l, // 从左至右的游标
j = r + 1; // 从右到左的游标
unsigned char pivot = a[l];
// 把左侧= pivot的元素与右侧= pivot 的元素进行交换
while (true) {
do {// 在左侧寻找= pivot 的元素
i = i + 1;
number++;
} while (a[i] pivot);
do {// 在右侧寻找= pivot 的元素
j = j - 1;
number++;
} while (a[j] pivot);
if (i = j) break; // 未发现交换对象
t=a[i];
a[i]=a[j];
a[j]=t;
}
// 设置p i v o t
a[l] = a[j];
a[j] = pivot;
quickSort(a, l, j-1); // 对左段排序
quickSort(a, j+1, r); // 对右段排序
}
中值虑波java代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于中值滤波程序代码、中值虑波java代码的信息别忘了在本站进行查找喔。







