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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

matlab去除坏点,图像处理之坏点校正及源码实现

發布時間:2025/4/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab去除坏点,图像处理之坏点校正及源码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、壞點介紹

圖像壞點(Bad pixel) : 圖像傳感器上光線采集點(像素點)所形成的陣列存在工藝上的缺陷,或光信號進行轉化為電信號的過程中出現錯誤,從而會造成圖像上像素信息錯誤,導致圖像中的像素值不準確,這些有缺陷的像素即為圖像壞點。

由于來自不同工藝技術和傳感器制造商,尤其對一些低成本、消費品的sensor來說,壞點數會有很多。另外,sensor在長時間、高溫環境下壞點也會越來越多,從而破壞了圖像的清晰度和完整性。壞點校正的目的就是修復這類問題,通常壞點分為一下兩種:

(1) 靜態壞點:分為靜態亮點和靜態暗點。

靜態亮點:一般來說像素點的亮度值是正比于入射光的,而亮點的亮度值明顯大于入射光乘以相應比例,并且隨著曝光時間的增加,該點的亮度會顯著增加;

靜態壞點:無論在什么入射光下,該點的值接近于0;

(2) 動態壞點:在一定像素范圍內,該點表現正常,而超過這一范圍,該點表現的比周圍像素要亮。與sensor 溫度、增益有關,sensor 溫度升高或者gain 值增大時,動態壞點會變的更加明 顯;

2、壞點校正成因

為什么圖像處理的過程中需要做壞點校正,而且壞點校正(DPC)通常在ISP的pipeline靠前位置?主要有如下原因:

(1) 如果圖像中存在壞點的話,ISP后續進行插值和濾波處理時,會影響周圍的像素點值,因此需要在插值和濾波之前對壞點進行校正 ;

(2) 圖像存在壞點比較多或動態壞點很多的情況下,會造成圖像的邊緣出現偽色彩的情況,這種現象不但影響圖像的清晰度,而且會影響邊緣的色彩;

(3) 壞點也會造成圖像部分pixel閃爍的現象;

3、壞點校正策略

圖像的壞點校正(DPC)通常在Bayer域(灰度圖原理一致)進行。若Bayer域為R/G/B三通道,則分別進行壞點校正;若Bayer域為RGBIR格式,則分別對R/Gr/Gb/B四通道獨立進行。動態壞點校正和靜態壞點校正是兩個相互獨立的過程,可以同時開啟,也可以只開啟一個,視需要設置。

靜態壞點校正:基于已有的靜態壞點表,比較當前點的坐標是否與靜態壞點表中的某個坐標一致,若一致則判定為壞點,然后再計算校正結果對其進行校正。一般情況下,每個sensor的壞點都不一樣,需要sensor廠商給出每個sensor的靜態壞點表,但是出于成本的考慮,很多sensor廠商并沒有給出,而用戶校正的話只能一個一個對其進行校正,因此對于一些低成本的sensor,靜態壞點校正的實用性不是很強。另外,由于在硬件設計的時候需要占用大量的memory,考慮到芯片面積以及一些其他原因,因此靜態壞點有大小的限制,不可以無限制的校正。

動態壞點校正:可以實時的檢測和校正sensor 的亮點與暗點,并且校正的壞點個數不受限制。動態壞點校正相對靜態壞點校正具有更大的不確定性。動態dpc可以分為兩個步驟,分別為壞點檢測和壞點校正。

4、源碼實現(Matlab Version)

該算法是動態壞點校正策略實現,算法使用梯度百分比的方式去檢測壞點,檢測到壞點之后通過中值濾波進行壞點校正,最終通過alpha混合的方式計算出最終的計算結果。代碼如下:

close all;

clear;

clc;

%% variable

dp_slope = 0.02;

dp_thresh = -0.3;

r=3; %Stencil radius

%% read raw image

% x = 0:255;

% y = dp_slope * x + dp_thresh;

% y(y<0) = 0;

% y(y>1) = 1;

% figure,

% plot(0:255,y)

% axis([0 255 0 1.5])

[filename, pathname] = ...

uigetfile({'*.raw'}, 'select picture');

str = [pathname filename];

fp = fopen(str, 'rb');

[X,l] = fread(fp, [1920,1080], 'uint16');

fclose(fp);

img = uint8(X/16)';

[height, width] = size(img);

img_correct = zeros(height, width);

%% Image edge extension

imgn=zeros(height+2*r,width+2*r);

imgn(r+1:height+r,r+1:width+r)=img;

imgn(1:r,r+1:width+r)=img(1:r,1:width);

imgn(1:height+r,width+r+1:width+2*r+1)=imgn(1:height+r,width:width+r);

imgn(height+r+1:height+2*r+1,r+1:width+2*r+1)=imgn(height:height+r,r+1:width+2*r+1);

imgn(1:height+2*r+1,1:r)=imgn(1:height+2*r+1,r+1:2*r);

%% dp algorithm

for i = r+1:height-r

for j = r+1:width-r

img_r = imgn(i-r:2:i+r, j-r:2:j+r);

data_r_center = img_r(r, r);

data_r_diff(1:r+1, 1:r+1) = abs(img_r - img_r(r,r));

data_r_sort = sort(img_r(:));

data_r_median = data_r_sort(r*2+1);

data_r_detect = data_r_diff * dp_slope + dp_thresh;

data_r_detect(data_r_detect < 0) = 0;

data_r_detect(data_r_detect > 1) = 1;

data_r_judge = sum(sum(data_r_detect > 0));

data_r_weight = sum(sum(data_r_detect)) / data_r_judge;

if i-r == 18 && j-r == 43

a = 1;

end

if data_r_judge >= 7

data_r_correct = data_r_median * data_r_weight + (1-data_r_weight) * data_r_center;

else

data_r_correct = data_r_center;

end

img_correct(i-r, j-r) = data_r_correct;

end

end

%% show

figure,imshow(uint8(img));

figure,imshow(uint8(img_correct));

仿真效果如下:

動態壞點校正前:

動態壞點校正之后:

本文轉載自:博客園 - 淇淇寶貝 ,轉載此文目的在于傳遞更多信息,版權歸原作者所有。

總結

以上是生活随笔為你收集整理的matlab去除坏点,图像处理之坏点校正及源码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。