去光照不均勻

2021-10-05 20:40:41 字數 2656 閱讀 1723

matlab**:

clc, close all; tic;

im = imread('test.png');

figure; imshow(im);

title('原圖');

[h, s, v] = rgb2hsv(im); %轉到hsv空間,對亮度h處理% 高斯濾波

hsize = min(size(im, 1), size(im, 2)); %高斯卷積核尺寸

q = sqrt(2);

sigma1 = 15; %**裡面的c

sigma2 = 80;

sigma3 = 250;

f1 = fspecial('gaussian', hsize, sigma1 / q);

f2 = fspecial('gaussian', hsize, sigma2 / q);

f3 = fspecial('gaussian', hsize, sigma3 / q);

gaus1 = imfilter(v, f1, 'replicate');

gaus2 = imfilter(v, f2, 'replicate');

gaus3 = imfilter(v, f3, 'replicate');

gaus = (gaus1 + gaus2 + gaus3) / 3; %多尺度高斯卷積,加權,權重為1 / 3

% gaus = (gaus * 255);

figure; imshow(gaus, );

title('光照分量');

%二維伽馬卷積

m = mean(gaus(:));

[w, height] = size(v);

out = zeros(size(v));

gama = power(0.5, ((m - gaus) / m)); %根據公式gamma校正處理,**公式有誤

out = (power(v, gama));

figure; imshow(out, );

rgb = hsv2rgb(h, s, out); %轉回rgb空間顯示

figure; imshow(rgb);

title('處理結果')

imwrite(rgb, 'test1.png');

toc;

c++**:

void imageinhomogeneity(mat & src, mat &dst)

} double hsize = min(src.cols, src.rows);

double q = sqrtf(2);

double sigma1 = 15;

double sigma2 = 80;

double sigma3 = 250;

mat f1 = getgaussiankernel(hsize, sigma1 / q);

mat f2 = getgaussiankernel(hsize, sigma2 / q);

mat f3 = getgaussiankernel(hsize, sigma3 / q);

mat f1_1 = mat::zeros(size(hsize, hsize),cv_64fc1);

mat f2_1 = mat::zeros(size(hsize, hsize), cv_64fc1);

mat f3_1 = mat::zeros(size(hsize, hsize), cv_64fc1);

for (int i = 0; i < hsize; i++) }

mat gaus1, gaus2, gaus3;

filter2d(v, gaus1, v.type(), f1_1);

filter2d(v, gaus2, v.type(), f2_1);

filter2d(v, gaus3, v.type(), f3_1);

mat gaus = (gaus1 + gaus2 + gaus3) / 3;

scalar mm = mean(gaus);

double m = mm[0];

mat gama = gaus.clone();

mat out = gaus.clone();

for (int i = 0; i < gama.rows; i++) }

for (int i = 0; i < src_v.rows; i++) }

mat outtt, outtt1;

vectorhsv_planes;

hsv_planes.push_back(src_h);

hsv_planes.push_back(src_s);

hsv_planes.push_back(src_v);

merge(hsv_planes, outtt);

cvtcolor(outtt, dst, color_hsv2bgr);

cout << "";

}

效果:

原圖:

處理後的圖:

Halcon表面缺陷檢測 不均勻光照的表面缺陷

對應示例程式 find scratches bandpass fft.hdev 目標 實現不均勻光照的表面缺陷。思路為 先建立乙個合適的帶通濾波器,然後把影象 例程做了影象反轉 傅利葉變換在頻域濾波,加強高頻部分,然後變回時域做形態學處理,最後通過line gauss檢測出缺陷。影象 dev upd...

redis集群redisKey分步不均勻問題

專案中使用了redis集群,但是生產上發現rediskey 80 都被分配到了同乙個節點,導致該節點磁碟容量報警,其餘節點閒置的情況 專案中為了保持資料的準確性,當系統傳送異常時 單例項上的mset是乙個原子性 atomic 操作,所有給定 key 都會在同一時間內被設定,某些給定 key 被更新而...

Echarts繪製不均勻資料軸(y)

現有一組資料 最小的數是50000 5萬 最大的數是3000000000 30億 如果按照echarts正常的畫法,我們只需提取出來這些資料然後交給echarts顯示即可。在圖中,y 軸的數值均勻分布,最高的柱子在x軸 第五值為30億,但是x軸 第一值為5萬的柱子,根本看不見,因為差距太大了,包括x...