#python #matlab
#питон #matlab
Вопрос:
Я новичок в Python и пытаюсь преобразовать и изменить следующий код из Matlab в python:
function A = alg_a(RGBimage, n) [row, column, d] = size(RGBimage); if (d==3) HSVimage = rgb2hsv(RGBimage); V = HSVimage(:,:,3); else V =double(RGBimage)/255; end V=V(:); [Vsorted, ix] = sort(V); s = (row*column)/n; i=0; h=[]; while (i lt; n) i=i 1; z = Vsorted(((floor(s*(i-1)) 1)):floor(s*i)); Vstart = (s*(i-1))/(row*column); Vstop = (s*i)/(row*column); r=z-z(1); f = (1/n)/(r(size(r,1))); g = r*f; if(isnan(g(1))) g = r Vstop; else g = g Vstart; end h=vertcat(h,g); end m(ix)=h; m=m(:); if(d==3) HSVimage(:,:,3) = reshape(m,row,column); A=hsv2rgb(HSVimage); else A=reshape(m,row,column); end return; end
Эта функция реализует алгоритм предварительной обработки изображений SMQT, и моя проблема в том, что я действительно не понимаю, как это работает, поэтому я застрял здесь:
import cv2 import numpy as np import math img = cv2.imread("16.bmp") n = 8 (row, column, dim) = img.shape if dim == 3: hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) V = hsv_img[:, :, 2] else: V = img / 255 V = V.flatten(order='F') Ix = V.argsort()[::-1] V_sorted = V[Ix] s = int(row*column/n) i = 0 h = [] while i lt; n: i = 1 z = V_sorted[math.floor(s*(i-1)) 1:math.floor(s*i)] z = np.array(z) V_start = (s*(i-1))/(row*column) V_stop = (s * i) / (row * column) r = z - z[0] f = (1 / n) / r[len(r)-1] g = r * f if math.isnan(g[0]): g = r V_stop else: g = g V_start if len(h) == 0: h = g else: h = np.vstack((h, g)) M = np.array([]) M[Ix] = h M = M.flatten(order='F') if dim == 3: hsv_img = np.reshape(M, row, column) img_res = cv2.cvtColor(img, cv2.COLOR_HSV2BGR) else: img_res = np.reshape(M, row, column) cv2.imwrite('16_smqt', img_res)
Похоже, что я написал код, аналогичный по функциональности, но он не работает, и я понятия не имею, почему. Код Matlab был взят мной из статьи, поэтому я не сомневаюсь, что он работает. Пожалуйста, помогите мне найти неточности в моем переводе с Matlab на python.
Комментарии:
1. Я бы посоветовал вам выучить Numpy. Это очень помогает в решении матриц и численных задач.
2. В чем именно заключается проблема?