日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

均值滤波java_均值滤波,中值滤波,最大最小值滤波

發(fā)布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 均值滤波java_均值滤波,中值滤波,最大最小值滤波 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/fastbox/article/details/7984721

討論如何使用卷積作為數(shù)學(xué)工具來處理圖像,實(shí)現(xiàn)圖像的濾波,其方法包含以下幾種,均值

濾波,中值濾波,最大最小值濾波,關(guān)于什么是卷積以及理解卷積在圖像處理中作用參見這

均值濾波:

均值濾波,是圖像處理中最常用的手段,從頻率域觀點(diǎn)來看均值濾波是一種低通濾波器,高

頻信號將會去掉,因此可以幫助消除圖像尖銳噪聲,實(shí)現(xiàn)圖像平滑,模糊等功能。理想的均

值濾波是用每個像素和它周圍像素計算出來的平均值替換圖像中每個像素。采樣Kernel數(shù)

據(jù)通常是3X3的矩陣,如下表示:

從左到右從上到下計算圖像中的每個像素,最終得到處理后的圖像。均值濾波可以加上兩個

參數(shù),即迭代次數(shù),Kernel數(shù)據(jù)大小。一個相同的Kernel,但是多次迭代就會效果越來越好。

同樣,迭代次數(shù)相同,Kernel矩陣越大,均值濾波的效果就越明顯。

中值濾波

中值濾波也是消除圖像噪聲最常見的手段之一,特別是消除椒鹽噪聲,中值濾波的效果要比

均值濾波更好。中值濾波是跟均值濾波唯一不同是,不是用均值來替換中心每個像素,而是

將周圍像素和中心像素排序以后,取中值,一個3X3大小的中值濾波如下:

最大最小值濾波

最大最小值濾波是一種比較保守的圖像處理手段,與中值濾波類似,首先要排序周圍像素和

中心像素值,然后將中心像素值與最小和最大像素值比較,如果比最小值小,則替換中心像

素為最小值,如果中心像素比最大值大,則替換中心像素為最大值。一個Kernel矩陣為3X3的最大最小值濾波如下:

原圖如下:

分別實(shí)現(xiàn)中值和均值濾波以后效果如下:

代碼就不解釋了,原理已經(jīng)解釋得很清楚了,全部算法源代碼都是基于Java

特別說明一點(diǎn)的是,均值濾波對于高斯噪聲的效果比較好,中值濾波對于椒鹽噪聲的效果比較好

想必大家從上面效果比較中也可以看到一點(diǎn)端倪。因?yàn)槲疫x擇的噪聲圖片是椒鹽噪聲的,哈哈

自己讀吧,不解釋了,有問題的可以問,源代碼如下:

package?com.process.blur.study;

import?java.awt.image.BufferedImage;

import?java.util.ArrayList;

import?java.util.Arrays;

public?class?SmoothFilter?extends?AbstractBufferedImageOp?{

public?final?static?int?MEAN_FILTER_TYPE?=?1;

public?final?static?int?MEADIAN_FILTER_TYPE?=?2;

public?final?static?int?MIN_MAX_FILTER_TYPE?=?4;

private?int?repeats?=?3;?//?default?1

private?int?kernel_size?=?3;?//?default?3

private?int?type?=?1;?//?default?mean?type

public?int?getRepeat()?{

return?repeats;

}

public?void?setRepeat(int?repeat)?{

this.repeats?=?repeat;

}

public?int?getKernelSize()?{

return?kernel_size;

}

public?void?setKernelSize(int?kernelSize)?{

this.kernel_size?=?kernelSize;

}

public?int?getType()?{

return?type;

}

public?void?setType(int?type)?{

this.type?=?type;

}

@Override

public?BufferedImage?filter(BufferedImage?src,?BufferedImage?dest)?{

int?width?=?src.getWidth();

int?height?=?src.getHeight();

if?(?dest?==?null?)

dest?=?createCompatibleDestImage(?src,?null?);

int[]?inPixels?=?new?int[width*height];

int[]?outPixels?=?new?int[width*height];

getRGB(?src,?0,?0,?width,?height,?inPixels?);

//?pick?up?one?filter?from?here!!!

if(this.type?==?MEAN_FILTER_TYPE)

{

for(int?i=0;?i

performMeanFilter(width,?height,?inPixels,?outPixels);

System.arraycopy(outPixels,?0,?inPixels,?0,?inPixels.length);

}

}

else?if(this.type?==?MEADIAN_FILTER_TYPE)

{

performMedianFilter(width,?height,?inPixels,?outPixels);

}

else?if(this.type?==?MIN_MAX_FILTER_TYPE)

{

performMinMaxFilter(width,?height,?inPixels,?outPixels);

}

//?return?result

setRGB(?dest,?0,?0,?width,?height,?outPixels?);

return?dest;

}

/**

*??

?perform?convolution?filter?

*

*?@param?width

*?@param?height

*?@param?inPixels

*?@param?outPixels

*/

public?void?performMeanFilter(int?width,?int?height,?int[]?inPixels,?int[]?outPixels)?{

int?rows2?=?kernel_size/2;

int?cols2?=?kernel_size/2;

int?index?=?0;

int?index2?=?0;

float?total?=?kernel_size?*?kernel_size;

for?(int?y?=?0;?y?

for?(int?x?=?0;?x?

float?r?=?0,?g?=?0,?b?=?0,?a?=?0;

for?(int?row?=?-rows2;?row?<=?rows2;?row++)?{

int?rowoffset?=?y?+?row;

if(rowoffset?=height)?{

rowoffset?=?y;

}

//System.out.println("rowoffset?==?"?+?rowoffset);

for(int?col?=?-cols2;?col?<=?cols2;?col++)?{

int?coloffset?=?col?+?x;

if(coloffset?=?width)?{

coloffset?=?x;

}

index2?=?rowoffset?*?width?+?coloffset;

int?rgb?=?inPixels[index2];

a?+=?((rgb?>>?24)?&?0xff);

r?+=?((rgb?>>?16)?&?0xff);

g?+=?((rgb?>>?8)?&?0xff);

b?+=?(rgb?&?0xff);

}

}

int?ia?=?0xff;

int?ir?=?clamp((int)(r/total));

int?ig?=?clamp((int)(g/total));

int?ib?=?clamp((int)(b/total));

outPixels[index++]?=?(ia?<

}

}

}

/**

*??

?perform?median?filter?

*

*?@param?width

*?@param?height

*?@param?src

*?@param?inPixels

*?@param?outPixels

*/

public?void?performMedianFilter(int?width,?int?height,?int[]?inPixels,?int[]?outPixels)?{

int?rows2?=?kernel_size/2;

int?cols2?=?kernel_size/2;

int?index?=?0;

int?index2?=?0;

float?total?=?kernel_size?*?kernel_size;

int[]?matrix?=?new?int[(int)total];

for?(int?y?=?0;?y?

for?(int?x?=?0;?x?

int?count?=?0;

for?(int?row?=?-rows2;?row?<=?rows2;?row++)?{

int?rowoffset?=?y?+?row;

if(rowoffset?=height)?{

rowoffset?=?y;

}

for(int?col?=?-cols2;?col?<=?cols2;?col++)?{

int?coloffset?=?col?+?x;

if(coloffset?=?width)?{

coloffset?=?x;

}

index2?=?rowoffset?*?width?+?coloffset;

int?rgb?=?inPixels[index2];

matrix[count]?=?rgb;

count++;

}

}

Arrays.sort(matrix);

int?ia?=?0xff;

int?ir?=?((matrix[count/2]?>>?16)?&?0xff);

int?ig?=?((matrix[count/2]?>>?8)?&?0xff);

int?ib?=?(matrix[count/2]?&?0xff);

outPixels[index++]?=?(ia?<

}

}

}

/**

*?

?perform?min/max?pixel?filter?

*

*?@param?width

*?@param?height

*?@param?src

*?@param?inPixels

*?@param?outPixels

*/

public?void?performMinMaxFilter(int?width,?int?height,?int[]?inPixels,?int[]?outPixels)?{

int?rows2?=?kernel_size/2;

int?cols2?=?kernel_size/2;

int?index?=?0;

int?index2?=?0;

float?total?=?kernel_size?*?kernel_size;

int[]?matrix?=?new?int[(int)total];

for?(int?y?=?0;?y?

for?(int?x?=?0;?x?

int?count?=?0;

for?(int?row?=?-rows2;?row?<=?rows2;?row++)?{

int?rowoffset?=?y?+?row;

if(rowoffset?=height)?{

rowoffset?=?y;

}

for(int?col?=?-cols2;?col?<=?cols2;?col++)?{

int?coloffset?=?col?+?x;

if(coloffset?=?width)?{

coloffset?=?x;

}

index2?=?rowoffset?*?width?+?coloffset;

int?rgb?=?inPixels[index2];

matrix[count]?=?rgb;

count++;

}

}

int?ia?=?0xff;

int?oldPixel?=?matrix[count/2];

int?targetRGB?=?findNewPixel(matrix,?oldPixel);

int?ir?=?((targetRGB?>>?16)?&?0xff);

int?ig?=?((targetRGB?>>?8)?&?0xff);

int?ib?=?(targetRGB?&?0xff);

outPixels[index++]?=?(ia?<

}

}

}

private?int?findNewPixel(int[]?matrix,?int?oldPixel)?{

ArrayList?list?=?new?ArrayList();

for(int?i=0;?i

if(matrix[i]?==?oldPixel)

continue;

list.add(matrix[i]);

}

int[]?filterData?=?new?int[list.size()];

int?index?=?0;

for(Integer?rgb?:?list)?{

filterData[index++]?=?rgb;

}

Arrays.sort(filterData);

if(filterData.length?==?0)

return?oldPixel;

return?(oldPixel?>?filterData[0])???filterData[0]?:?(oldPixel?

}

public?static?int?clamp(int?c)?{

if?(c?

return?0;

if?(c?>?255)

return?255;

return?c;

}

}

總結(jié)

以上是生活随笔為你收集整理的均值滤波java_均值滤波,中值滤波,最大最小值滤波的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣视频在线看 | 欧美日韩亚洲国产精品 | 国产人成在线观看 | 精品久久在线观看 | 吸咬奶头狂揉60分钟视频 | 国内精品久久99人妻无码 | 夜夜爽www| 亚洲欧美日韩在线 | 色草在线 | 国产黄色免费看 | 骚色综合 | 国产福利视频网站 | 特黄一区二区 | 香蕉视频官网在线观看 | 一本一道无码中文字幕精品热 | 69xxxx日本 | 日日夜夜天天干 | 97热久久| 国产午夜精品久久久久久久久久 | 日韩一区二区免费播放 | av毛片在线免费观看 | 级毛片内射视频 | 国产一区在线观看视频 | 偷拍一区二区 | 九九资源网 | 久久香蕉网 | 国产在线拍揄自揄拍无码视频 | 精品中文字幕在线 | 免费日皮视频 | 中文字幕久久av | 久久久久久久久久久国产 | 国产精品亚洲色图 | 日本久久网 | www.日本com| 国产精品1区2区3区4区 | 青青青在线视频观看 | 国产成人在线观看 | 91 在线观看| 人体毛片 | 国产黄色影院 | 国产成人av一区二区三区在线观看 | 日韩欧美的一区二区 | 国产精品久久久久久亚洲调教 | 欧美性爱精品一区 | 国产精品99无码一区二区 | 97视频在线免费观看 | 久久不卡视频 | 国产欧美大片 | 久久久国产精品黄毛片 | 成人a级免费视频 | 人妻 丝袜美腿 中文字幕 | 久久亚洲av午夜福利精品一区 | 国产精品人成在线观看免费 | 欧美日韩成人免费 | 九九视频在线免费观看 | 国产精品乱码久久久久久 | 精品在线播放视频 | 国产永久在线观看 | 99久久婷婷国产综合精品电影 | 天天看天天色 | 在线免费国产 | 一级久久 | 亚洲色图14p | 麻豆影视大全 | 亚洲黄v| 免费的av网址 | 台湾av在线 | 91免费污视频 | 护士的小嫩嫩好紧好爽 | 粗喘呻吟撞击猛烈疯狂 | 国产免费一级 | 国产毛片在线视频 | h视频免费在线观看 | 色一情一区二 | 欧美亚洲欧美 | 欧美tv| 国产精品主播视频 | 成人美女毛片 | 一边摸一边抽搐一进一出视频 | 女女爱爱视频 | 午夜视频在线观看国产 | 神马久久春色 | 少妇粉嫩小泬喷水视频www | a视频 | 蜜桃成人在线 | av免费看片 | 一区二区中文字幕 | 亚洲va欧美va天堂v国产综合 | 黄页网站免费观看 | 亚洲男人的天堂网 | 高清久久 | 日韩怡春院 | 自拍偷拍色综合 | 人人看人人爱 | 欧美成人精品一区二区三区在线看 | 午夜黄色福利视频 | 污视频免费在线 | 真人一毛片 | 亚洲av毛片基地 |